Matplotlib Xticks条形图中的值

时间:2017-12-15 19:22:17

标签: python matplotlib bar-chart

我有这个代码,我试图制作图表。列表中的所有值都是正确的。但是,我在x轴上有问题。首先,前两个刻度之间存在差距。我在他们的网站上阅读了所有matplotlib,但却找不到任何有用的问题。我对xticks功能感到困惑。 This is my graph

plt.bar(Valloc1,[diabete[w] for w in sorted(diabete.keys())], width=0.2,)

plt.bar(Valloc2,[not_diabete[w] for w in sorted(not_diabete.keys())], width=0.1, )

plt.xticks(all_years, rotation = '65')
plt.legend(['Diabete','Not-Diabete'])
plt.xlabel('Years')
plt.ylabel('# of patients')
plt.legend()
plt.show()

我试过这条线,但一切都变得更糟。

plt.xticks(range(all_years),all_years, rotation = '65')

我还希望旁边的两个栏不重叠。像这样 : Bars side-by-side Bars side-by-side

我的变数是:

Valloc1 = [i for i in range(52)]
diabete = {{1967: 5, 1986: 13, 1985: 9, 1996: 5, 1984: 10, 1987: 6, 1991: 8...}

1 个答案:

答案 0 :(得分:5)

以下是如何解决问题的示例。由于您没有提供数据,我首先在下面的示例中生成一些随机数据,然后将其显示为您请求的条形图:

from matplotlib import pyplot as plt
import numpy as np

##generating some data
years = [1936, 1945]+[i for i in range(1947,1997)]
data1 = np.random.rand(len(years))
data2 = np.random.rand(len(years))

diabete = {key: val for key,val in zip(years, data1)}
not_diabete = {key: val for key,val in zip(years, data2)}



##the actual graph:
fig, ax = plt.subplots(figsize = (10,4))

idx = np.asarray([i for i in range(len(years))])

width = 0.2

ax.bar(idx, [val for key,val in sorted(diabete.items())], width=width)
ax.bar(idx+width, [val for key,val in sorted(not_diabete.items())], width=width)

ax.set_xticks(idx)
ax.set_xticklabels(years, rotation=65)
ax.legend(['Diabete', 'Non-Diabete'])
ax.set_xlabel('years')
ax.set_ylabel('# of patients')

fig.tight_layout()

plt.show()

结果如下:

result of the code provided