字典中具有不同长度的箱线图

F.L*_*ira 2 python

我有一本字典,每个键的值长度不同。试图以a表示boxplot,我无法前进。还有其他方法吗?

我写了这个,但是不起作用:

import matplotlib.pyplot as plt 
import matplotlib as mpl 

dict1 = {'Pb': [53.0, 56.0, 56.0, 57.0, 57.0, 57.0, 46.0], 'Pa': [56.0, 55.0], 'Pg': [57.0, 57.0, 58.0, 57.0, 57.0, 57.0, 57.0, 57.0,53.0, 57.0, 55.0, 58.0, 58.0, 58.0, 57.0, 57.0, 57.0, 57.0, 57.0, 55.0, 55.0, 57.0, 57.0, 55.0, 58.0, 58.0, 58.0, 55.0, 58.0, 54.0, 58.0, 57.0, 57.0, 58.0, 55.0, 56.0, 55.0, 55.0, 55.0, 58.0, 56.0, 57.0, 57.0, 57.0, 57.0, 56.0, 57.0, 56.0],'Pf': [54.0], 'Pn': [56.0, 56.0, 55.0, 56.0, 56.0, 56.0], 'Ps': [58.0, 56.0, 57.0, 56.0, 56.0, 55.0, 56.0, 56.0, 56.0, 55.0, 56.0, 56.0, 56.0, 58.0, 57.0, 58.0, 57.0, 57.0, 56.0, 58.0, 56.0, 53.0, 56.0, 56.0, 56.0, 56.0, 56.0, 56.0]}

      # remove from here
for k, v in dict1.iteritems():
      boxplot(k,v) 
      plt.show()
Run Code Online (Sandbox Code Playgroud)

提出并测试了该解决方案:只需将解释替换为以下文本。它适用于python 3.5

#And include this:
labels, data = [*zip(*dict1.items())]  # 'transpose' items to parallel key, value lists
    plt.boxplot(data)
    plt.xticks(range(1, len(labels) + 1), labels)
    plt.show()
Run Code Online (Sandbox Code Playgroud)

f5r*_*e5d 5

您是否希望所有值都在一起?
[n for v in dict1.values() for n in v]“拉平”值列表

那么箱形图就是matplotlib标准图https://matplotlib.org/examples/pylab_examples/boxplot_demo.html

from matplotlib import pyplot as plt


plt.boxplot([n for v in dict1.values() for n in v])
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

或按键

# Pythopn 3.5+
labels, data = [*zip(*dict1.items())]  # 'transpose' items to parallel key, value lists

# or backwards compatable    
labels, data = dict1.keys(), dict1.values()

plt.boxplot(data)
plt.xticks(range(1, len(labels) + 1), labels)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明