Matplotlib中的条形图在x坐标上具有较大范围时显示较少的条形图

ale*_*s80 3 python plot matplotlib bar-chart

我在这里用python和matplotlib中的条形图做错了什么?第一个图是好的,第二个图在x轴上的范围更广,最大到1500。请注意,在第二个图中,低比例尺上的大多数条消失了,但是未显示1500的条。

我尝试在bar()方法中设置width = 0.8,但这无济于事。

使用对数的x轴(使用plt.xscale('log'))似乎可以正常工作

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(12, 6))

plt.bar(np.array([1,2,3,4,11,12]), np.array([10,2,1,1,3,10]))
plt.show()
#Then I close the figure and run this:
plt.bar(np.array([1,2,3,4,11,1500]), np.array([10,2,1,1,3,10]))
plt.show()
Run Code Online (Sandbox Code Playgroud)

第一次情节不错 第二情节,不好

Imp*_*est 6

条默认情况下为1个数据单位宽。轴宽约600像素,但约有1500个单位。因此,您将看到任何单个条形的机会600/1500*1 = 40%。从这种意义上来说,很不幸,您没有看到x = 1500处的柱线。其他条形图之间的距离非常近,您看不到实际显示的是哪一个。

与其依赖查看条形图的机会,不如使条形图足够宽以便可以安全地看到它。例如使用5的宽度

plt.bar(np.array([1,2,3,4,11,1500]), np.array([10,2,1,1,3,10]), width=5)
Run Code Online (Sandbox Code Playgroud)

另外,您也可以显示一个茎图,即用线代替条的图,

plt.stem(np.array([1,2,3,4,11,1500]), np.array([10,2,1,1,3,10]),markerfmt=" ", basefmt=" ")
plt.ylim(0,None)
Run Code Online (Sandbox Code Playgroud)