生成具有较大x值的图形

时间:2018-08-22 09:54:24

标签: python-3.x matplotlib

我需要在Python中绘制条形图。我写了一个简单的示例代码。

import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111)
x_axis = [20, 32, 64, 96, 160, 192, 224, 288, 320, 352, 416, 512, 576, 704, 864, 1024, 1056, 1152, 1408, 1536, 1824, 1952, 4096, 4192, 4896, 5664, 6144, 6176, 6944, 12128, 12288, 13824, 15424, 16384, 16768, 28800, 39520, 49152, 64512, 73728, 114688, 147456, 444544, 451200, 1206400, 1453472, 2565504, 3833856, 7243776, 17350656, 26007552, 42844160]
y_axis = [1, 31, 32, 63, 7, 11, 1, 2, 1, 1, 1, 4, 6, 26, 1, 1, 4, 2, 5, 1, 1, 1, 1, 4, 1, 1, 1, 48, 1, 1, 3, 1, 1, 4, 51, 1, 2, 4, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
ax.bar(x_axis, y_axis, align='center')
ax.set_xticks(x_axis)
ax.set_xticklabels([i for i in x_axis])
fig.savefig('graph.png')

,但是它生成的图是完全错误的。这里有什么问题。

2 个答案:

答案 0 :(得分:0)

问题是您的x值的范围为10**110**7。因此,您绘制的任何条形图都不可见,因为它们是细小的离散峰。为了使它们可视化,我做了两件事:首先,为条形分配宽度,其次,使用对数x轴。以下是修改后的线条,然后是结果图。我不确定这是否满足您的需要,但如果没有对数刻度,我认为您将无法使用如此宽泛的x范围可视化条形图。在下图中,再次由于对数刻度导致条宽度不一致,但这只是向您显示问题所在( x值范围太大

plt.bar(x_axis, y_axis, align='center', width=15)
ax.set_xscale('log')

输出

enter image description here

答案 1 :(得分:0)

类似于Bazingaa的答案,但这显示所有具有相同大小的条形:

c=0.05
plt.bar(x_axis, y_axis, width=c*np.array(x_axis), color='b')
ax.set_xscale("log")

enter image description here