我有一个字典,其中一个值与每个键相关联。
我想将此字典绘制为带有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值排序会很棒。我知道字典无法排序所以我可以查看一个列表吗?
有什么想法吗?
由于
答案 0 :(得分:2)
我想用matplotlib绘制这个dictionnay,设置一个不同的 每个键的颜色,并找到一种方法来绘制一个很长的键 string ...此外,将这个情节排序也很棒。
不幸的是,我能够绘制长字符串的最佳方法是截断它们。我随意选择了15个字符作为最大长度,你可以使用你认为合适的任何长度。
以下代码定义了一个字典(Dictionary
),按值从最大到最小创建了排序键和排序值的列表,并截断了太长而无法显示的键。绘制条形图时,一次只完成一个条形图,因此可以为条形图设置单独的颜色。通过迭代开头定义的元组(颜色)来选择颜色。
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()
输出图: