2017-11-25 500 views
0

我在这里用python和matplotlib中的条形图做错了什么?第一个情节是好的,第二个情节在X轴上的范围可以达到1500.在第二个情节中,大多数低级别的酒吧都消失了,但是1500的酒吧也没有显示。matplotlib中的条形图在x坐标上有较大的范围时显示较少的条形图

我试图在bar()方法中设置width = 0.8,但这没有帮助。

随着对数x轴(使用plt.xscale( '登录'))它似乎很好地工作

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

First plot, good Second plot, bad

回答

4

棒由缺省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) 

的宽度或者你也可以表现出干的情节,即用线,而不是酒吧的情节,

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

感谢。虽然“宽度”不是真正的宽度,但它被缩放,并且条形图不会将最小宽度设置为例如1或2个像素。我从来没有与其他绘图工具(matlab和其他)的这个问题 – aless80

+0

我认为没有人想象如果一个“酒吧”的宽度小于一个像素可能是有用的。在这种情况下,它应该被使用,而是一个有点扩展的线。在我看来,在数据单元中使用条宽而不是别的方法是明智的。 – ImportanceOfBeingErnest

相关问题