【问题标题】:How to make a barchart with multiple datas using matplotlib如何使用 matplotlib 制作包含多个数据的条形图
【发布时间】:2018-12-22 23:32:59
【问题描述】:

我正在尝试使用 matplotlib 在 python 上制作条形图,但即使我知道我正在尝试做的事情非常简单,我也确实很挣扎。

我有相同长度的不同变量,想象一下 4 个列表:

run1 = [250,250,250,250]
run2 = [100,100,400,400]
run3 = [50,250,550,150]
run4 = [300,200,100,400]

我想要的只是一个 4*4 条形图。我想对每个列表的第一个元素(此处为 250,100,50,300)进行分组,并有四个不同颜色的条,其高度对应于 y 轴上的值。然后放一个空格,再有 4 个柱子,下一个值 (250,100,250,200) 等等。

我该怎么做?

谢谢。

【问题讨论】:

    标签: python matplotlib bar-chart


    【解决方案1】:

    我想最好的方法是将您的数据列表转换为 pandas DataFrame 并绘制:

    import matplotlib.pyplot as plt
    import pandas as pd
    
    run1 = [250,250,250,250]
    run2 = [100,100,400,400]
    run3 = [50,250,550,150]
    run4 = [300,200,100,400]
    
    runs = pd.DataFrame({'Run 1': run1, 'Run 2': run2,
     'Run 3': run3, 'Run 4': run4})
    runs.plot.bar()
    plt.show()
    

    【讨论】:

      【解决方案2】:

      这是一种方法。首先将所有四个列表合并在一起,以利用 NumPy 索引从每个列表中获取一个元素。

      这里alpha控制条形透明度的参数很重要,因为如果您使用不透明条alpha=1,那么您将只能看到最高的条,因为其他条将隐藏在它后面。我用alpha=0.2。您可以使用任何您喜欢的值。

      import numpy as np
      import matplotlib.pyplot as plt
      
      run1 = [250,250,250,250]
      run2 = [100,100,400,400]
      run3 = [50,250,550,150]
      run4 = [300,200,100,400]
      
      run_all = np.stack((run1, run2, run3, run4))
      
      for i in range(len(run_all)):
          plt.bar(range(4), run_all[i, :], alpha=0.2)
      

      【讨论】:

      • 谢谢你的回答,问题是当你这样做时,由于透明度,你有很多不同的颜色。我更希望酒吧并排放置。所以我可以指定颜色。另外,如何为每个不同的条指定标签?例如 x 轴上的 run1、run2、run3 和四个?
      猜你喜欢
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 2019-06-24
      • 2016-05-12
      • 1970-01-01
      • 2021-04-22
      相关资源
      最近更新 更多