从字典中绘制直方图时出错

时间:2017-07-13 20:11:57

标签: python matplotlib histogram networkx

我有一个带7191个键的字典,值代表每个键的频率。

degree_distri = {'F2': 102, 'EGFR': 23, 'C1R': 20,...} 

为绘制直方图,我做了:

plt.bar(list(degree_distri.keys()), degree_distri.values(), color='r') 

但我收到此错误消息: unsupported operand type(s) for -: 'str' and 'float'

我不应该使用上面的代码来绘制直方图吗?如果没有,会有什么建议?为什么会导致错误?

谢谢!

2 个答案:

答案 0 :(得分:2)

查看此示例here和您必须的documentation 以不同的格式提供数据。

import matplotlib.pyplot as plt
import numpy as np

degree_distri = {'F2': 102, 'EGFR': 23, 'C1R': 20}

fig, ax = plt.subplots()
indices = np.arange(len(degree_distri))
width = 0.6

ax.bar(indices, degree_distri.values(), width)

ax.set_xticks(indices)
ax.set_xticklabels(degree_distri.keys())

首先设置条形的左x坐标,使用indices,一个包含数字0的数组,直到dict的长度。然后提供值。 keys中的dict必须设置为轴标签,并将轴标签定位在正确的位置,您必须使用条形的x位置调用set_xticks

答案 1 :(得分:2)

matplotlib.pyplot.bar 将两个标量序列作为强制性参数:条形左侧的x坐标和条形的高度。因此,您应该使用range来获取所需的参数,然后使用 plt.xticks 设置所需的时间码:

import matplotlib.pyplot as plt

degree_distri = {'F2': 102, 'EGFR': 23, 'C1R': 20}
keys, values = degree_distri.keys(), degree_distri.values()
plt.bar(range(len(values)), values, color='r')
plt.xticks(range(len(values)), keys)
plt.show()

enter image description here