【问题标题】:Separating the groups of bar chart in python在python中分离条形图的组
【发布时间】:2020-03-25 02:49:39
【问题描述】:

在下面的代码中,我有两组条形图,每组有 5 个条形图。问题是它们结合在一起并且非常接近。如何将两组条形图分开?

    X = np.arange(2)
    barWidth = 0.25
    plt.bar(X + 0.00, Unf1_list, color = 'b', width = 0.2,align='center')
    plt.bar(X + 0.25, Unf2_list, color = 'g', width = 0.2,align='center')
    plt.bar(X + 0.50, Unf3_list, color = 'r', width = 0.2,align='center')
    plt.bar(X + 0.75, Unf4_list, color = 'y', width = 0.2,align='center')
    plt.bar(X + 1.00, Unf5_list, color = 'gray', width = 0.2,align='center')
    plt.yscale('log')
    plt.xticks([r + barWidth for r in range(2)], ['z=1', 'z=6'])
    plt.show()

【问题讨论】:

    标签: python matplotlib bar-chart


    【解决方案1】:

    我会建议你减少条宽,这样组就更分开了

    barWidth = 0.15
    barSep = 0.01
    
    for i, lst in enumerate([lst1, lst2, lst3, lst4, lst5]):
        plt.bar(X + i*(barWidth+barSep), lst, width=barWidth, color=f'C{i}')
    
    plt.yscale('log')
    plt.xticks([r + barWidth for r in range(2)], ['z=1', 'z=6'])
    plt.show()
    

    输出:

    【讨论】:

      【解决方案2】:

      [在我发布我的答案后,我注意到之前发布了一个非常相似的答案。我还注意到另一篇文章没有解决蜱的位置。]

      在 OP 的代码中,fig.update_layout(bargap=..., bargroupgap=...) 将不起作用,因为距离是手动设置的。原始设置不起作用,因为第一组的最后一个条与第二组的第一个条放在同一位置。

      我的方法是通过条的数量和所需的间隙来计算条宽。这也允许计算放置 xticks 的确切中心。

      Unf1_list = [24, 25]
      Unf2_list = [14, 15]
      Unf3_list = [94, 95]
      Unf4_list = [22, 23]
      Unf5_list = [4, 5]
      ys = [Unf1_list, Unf2_list, Unf3_list, Unf4_list, Unf5_list]
      
      X = np.arange(2)
      num_bars_in_group = len(ys)
      gap_between_bargroups = 0.15  # where 1.0 means the distance between the first bar of a group to the first of the next
      gap_between_bars_in_group = 0.03
      
      bar_width = ((1.0 - gap_between_bargroups) + gap_between_bars_in_group) / num_bars_in_group
      
      #colors = ['b', 'g', 'r', 'y', 'gray']
      colors = ['#7fc97f','#beaed4','#fdc086','#ffff99','#386cb0']
      
      for i, (y, c) in enumerate(zip(ys, colors)):
          plt.bar(X + i*bar_width, y, color=c, width=bar_width - gap_between_bars_in_group, align='center')
      plt.yscale('log')
      plt.xticks([r + bar_width * (num_bars_in_group - 1) / 2 for r in range(2)], ['z=1', 'z=6'])
      plt.show()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-29
        • 1970-01-01
        • 2021-10-21
        • 1970-01-01
        • 2017-01-04
        • 1970-01-01
        • 2012-11-09
        • 2019-09-05
        相关资源
        最近更新 更多