【问题标题】:Bar chart in matplotlib shows less bars when having big range on x coordinates当 x 坐标范围较大时,matplotlib 中的条形图显示的条形较少
【发布时间】:2018-05-09 09:21:00
【问题描述】:

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

【问题讨论】:

    标签: python matplotlib plot bar-chart


    【解决方案1】:

    条形默认为 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)
    

    【讨论】:

    • 谢谢。虽然“宽度”不是真正的宽度,但它会被缩放,而且条形图没有将最小宽度设置为例如,这有点愚蠢。 1 或 2 个像素。我在使用其他绘图工具(matlab 等)时从未遇到过这个问题
    • 我认为没有人想到如果“条”的宽度小于一个像素,它可能会有用。在这种情况下,应该使用一条带有点扩展的线。在我看来,以数据单位而不是其他单位来表示条形宽度绝对是有意义的。
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 2014-10-30
    • 1970-01-01
    • 2020-01-02
    • 2021-08-24
    • 2018-11-30
    • 1970-01-01
    • 2019-08-06
    相关资源
    最近更新 更多