从字典绘制直方图 Python
我有一个字典,每个键都有一个对应的值。
我想用 matplotlib
把这个字典画成一个柱状图,给每根柱子设置不同的颜色,并且找到一种方法,让长字符串作为清晰的标签。
X = np.arange(len(dictionay))
pl.bar(X, dictionay.values(), align='center', width=0.5)
pl.xticks(X, dictionay.keys())
pl.xticks(rotation=20)
ymax = max(dictionay.values()) + 1
pl.ylim(0, ymax)
pl.show()
结果是:
我的键很长,所以我们看得不太清楚!而且,如果能按 y 值排序的话就更好了。我知道字典不能排序,那我可以用列表吗?
有什么想法吗?
谢谢
1 个回答
2
我想用matplotlib来绘制这个字典,给每个键设置不同的颜色,并且找到一种方法来绘制那些很长的字符串作为键……另外,如果能把这个图表排序就更好了。
可惜的是,我找到的处理长字符串的最好方法就是把它们截断。我随便选择了15个字符作为最大长度,你可以根据自己的需要选择合适的长度。
下面的代码定义了一个字典(Dictionary
),创建了一个按值从大到小排序的键和对应值的列表,并且截断那些显示不好的长键。当绘制条形图时,是一个一个条形绘制的,这样就可以为每个条形设置不同的颜色。颜色是通过遍历一开始定义的元组(Colors)来选择的。
import numpy as np
import matplotlib.pyplot as plt
Dictionary = {"A":3,"C":5,"B":2,"D":3,"E":4,
"A very long key that will be truncated when it is graphed":1}
Dictionary_Length = len(Dictionary)
Max_Key_Length = 15
Sorted_Dict_Values = sorted(Dictionary.values(), reverse=True)
Sorted_Dict_Keys = sorted(Dictionary, key=Dictionary.get, reverse=True)
for i in range(0,Dictionary_Length):
Key = Sorted_Dict_Keys[i]
Key = Key[:Max_Key_Length]
Sorted_Dict_Keys[i] = Key
X = np.arange(Dictionary_Length)
Colors = ('b','g','r','c') # blue, green, red, cyan
Figure = plt.figure()
Axis = Figure.add_subplot(1,1,1)
for i in range(0,Dictionary_Length):
Axis.bar(X[i], Sorted_Dict_Values[i], align='center',width=0.5, color=Colors[i%len(Colors)])
Axis.set_xticks(X)
xtickNames = Axis.set_xticklabels(Sorted_Dict_Keys)
plt.setp(Sorted_Dict_Keys)
plt.xticks(rotation=20)
ymax = max(Sorted_Dict_Values) + 1
plt.ylim(0,ymax)
plt.show()
输出图表: