【问题标题】:How to keep the width of the bars the same no matter the number of bars we compare in the figure?无论我们在图中比较多少条,如何保持条的宽度相同?
【发布时间】:2011-03-27 18:36:33
【问题描述】:

无论比较的条数是高还是低,我都想保持条的宽度相同。 我正在使用 Matplotlib 堆积条形图。 条的宽度与条的数量有关。 这是我的示例代码。

无论我比较从 1 到 10 的条数,如何使宽度相同

import numpy as np
import matplotlib.pyplot as plt




N =1  
ind = np.arange(N)    # the x locations for the groups
width = 0.35       # the width of the bars: can also be len(x) sequence




design = []
arch = []
code = []

fig = plt.figure()



b   = [70]
a= np.array([73])
c = [66]




p1 = plt.bar(ind, a,width, color='#263F6A')
p2 = plt.bar(ind, b, width, color='#3F9AC9', bottom=a)
p3 = plt.bar(ind, c, width, color='#76787A', bottom=a+b)


plt.ylabel('Scores')
plt.title('CQI Index')


plt.xticks(ind+width/2., ('P1'))#dynamic - fed

plt.yticks(np.arange(0,300,15))


plt.legend( (p1[0], p2[0], p3[0]), ('A','B','C') )
plt.grid(True)

plt.show()

谢谢

【问题讨论】:

    标签: python matplotlib bar-chart fixed-width


    【解决方案1】:

    条的宽度不会改变,图像的比例会改变。如果您希望比例保持不变,您必须手动指定要显示的范围,无论您的绘图是 10x10、100x100 还是 1,000,000,000 x 10

    编辑:

    如果我理解正确,你想要的是这样的:

    图表 1 - 2 条:

    10
    +---------------------------+
    |                           |
    |                           |
    |                           |
    |                           |
    |                           |
    |       4_                  |
    |       | |                 |
    |  2_   | |                 |
    |  | |  | |                 |
    |  | |  | |                 |
    +---------------------------+ 10
    

    图表 2 - 再添加 2 个柱

    10
    +---------------------------+
    |                           |
    |                           |
    |                 7_        |
    |                 | |       |
    |                 | |       |
    |       4_        | |       |
    |       | |  3_   | |       |
    |  2_   | |  | |  | |       |
    |  | |  | |  | |  | |       |
    |  | |  | |  | |  | |       |
    +---------------------------+ 10
    

    从图表 1 到图表 2,条形的表观宽度没有变化。如果这是您想要做的,那么您需要设置绘图的比例

    你可以这样做

    import matplotlib
    matplotlib.use('GTKAgg')
    
    import matplotlib.pyplot as plt
    import gobject
    
    fig = plt.figure()
    ax = fig.add_subplot(111)
    
    def draw1():
        plt.bar(0,2)
        plt.bar(2,4)
        ax.set_xlim((0,10))
        ax.set_ylim((0,10))
        fig.canvas.draw()
        return False
    
    def draw2():
        plt.bar(4,3)
        plt.bar(6,7)
    
        ax.set_xlim((0,10))
        ax.set_ylim((0,10))
        fig.canvas.draw()
        return False
    
    draw1()
    gobject.timeout_add(1000, draw2)
    plt.show()
    

    【讨论】:

    • 我同意,宽度始终如开头指定的那样。我的真正意思是我希望比例自动改变,以免条形图被挤压以适应绘图区域。我的意思是绘图区域应该是动态的。因此,我们无需将绘图区域除以条数,而是将一个添加到另一个直到 10 个条。
    • 对不起,如果我没有清楚地表达自己。添加图表不是我正在寻找的功能。这更像是一个类比。我不想添加酒吧。我只是想解释一下,无论图中的条数是多少,宽度都应该看起来一样。他们不应该分割图形,否则我们需要的条形越多,我们得到的图形就越小。他们宁愿强迫这个数字扩大一点,让他们看起来一样。否则,如果我们绘制一个条形图,它不应该像上面的示例那样占用整个空间。谢谢
    • 这是我的问题的回答,但我不明白这家伙是什么意思 mail-archive.com/matplotlib-users@lists.sourceforge.net/…
    • 这正是我想要表达的意思——您必须使用.set_xlim((min, max)).set_ylim((min, max)) 设置比例。您必须根据数据集的大小来决定最小值和最大值。
    • 天哪,太酷了...非常感谢。现在我需要让它们居中。谢谢一百万
    猜你喜欢
    • 2021-12-18
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2018-10-15
    • 2021-06-23
    • 2017-08-12
    相关资源
    最近更新 更多