【问题标题】:python + matplotlib: how can I change the bar's line width for a single bar?python + matplotlib:如何更改单个条的条线宽度?
【发布时间】:2013-12-06 04:08:43
【问题描述】:

我有一个由 3 个堆叠系列和 5 个条组成的条形图。我想通过更改线条的宽度来突出显示一个条(所有 3 个堆叠元素)。

我正在使用以下命令绘制条形:

mybar = ax.bar(x,Y[:,i],bottom=x,color=colors[i],edgecolor='none',width=wi,linewidth = 0)
bar_handles = np.append(bar_handles,mybar)

我将要更改的条形图的句柄存储在数组bar_handles 中,有没有办法在绘制条形图后更改其edgecolorlinewidth 属性?

【问题讨论】:

    标签: python python-2.7 matplotlib


    【解决方案1】:

    我最终这样做了:

    ax.axvspan(X1,
               X1+wi,
               ymax=Y2,
               facecolor='none',
               edgecolor='black',
               linewidth=2)
    

    …在哪里

    X1 = bar_handles[startBlock].get_x()
    wi = bar_handles[startBlock].get_width()
    Y2 = ax.transLimits.transform((0,bar_handles[startBlock].get_height()))[1]
    

    这会在我的栏上产生一条边——包括其中的所有元素——元素之间没有水平线。

    【讨论】:

      【解决方案2】:

      ax.bar 返回艺术家的Container;每个“艺术家”都是一个 Rectangleset_linewidthset_edgecolor 方法。

      要更改mybar 中第二个栏的设置,您可以这样做:

      mybar[1].set_linewidth(4)
      mybar[1].set_edgecolor('r')
      

      这是一个脚本,展示了如何使用它来改变堆栈的线宽:

      import numpy as np
      import matplotlib.pyplot as plt
      
      
      x = np.array([1,2,3])
      y1 = np.array([3,2.5,1])
      y2 = np.array([4,3,2])
      y3 = np.array([1,4,1])
      
      width = 0.5
      handles = []
      b1 = plt.bar(x, y1, color='#2040D0', width=width, linewidth=0)
      handles.append(b1)
      b2 = plt.bar(x, y2, bottom=y1, color='#60A0D0', width=width, linewidth=0)
      handles.append(b2)
      b3 = plt.bar(x, y3, bottom=y1+y2, color='#A0D0D0', width=width, linewidth=0)
      handles.append(b3)
      
      # Highlight the middle stack.
      for b in handles:
          b[1].set_linewidth(3)
      
      plt.xlim(x[0]-0.5*width, x[-1]+1.5*width)
      plt.xticks(x+0.5*width, ['A', 'B', 'C'])
      plt.show()
      

      此脚本创建以下条形图:

      【讨论】:

      • 谢谢,这只会填充所选块上的第一个元素(堆叠 3 个元素),请参阅 i.imgur.com/CKgOjTL.png
      • 当然,这只是为了让您入门。 :)
      • 我在答案中添加了一个演示脚本。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 2014-01-13
      相关资源
      最近更新 更多