从字典Python中绘制直方图

时间:2014-05-23 16:48:59

标签: python matplotlib

我有一个字典,其中一个值与每个键相关联。

我想将此字典绘制为带有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()

结果:

Ugly graph showing undesired behavior

我的钥匙很长,所以我们看不清楚!此外,将此图按y值排序会很棒。我知道字典无法排序所以我可以查看一个列表吗?

有什么想法吗?

由于

1 个答案:

答案 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()

输出图:

Output Graph