【问题标题】:Plot multiple boxplot in one graph in pandas or matplotlib?在 pandas 或 matplotlib 的一张图中绘制多个箱线图?
【发布时间】:2023-03-24 08:05:02
【问题描述】:

我有两个箱线图

a1=a[['kCH4_sync','week_days']]
a1.boxplot(by = 'week_days', meanline=True, showmeans=True, showcaps=True, showbox=True,            
                 showfliers=False)
a2=a[['CH4_sync','week_days']]
a2.boxplot(by = 'week_days', meanline=True, showmeans=True, showcaps=True, showbox=True,     
                 showfliers=False)

但我想将它们放在一个图表中进行比较。你有什么建议来解决这个问题吗?谢谢!

【问题讨论】:

    标签: python matplotlib pandas


    【解决方案1】:

    要在一个 matplotlib 图形上绘制多个箱线图,您可以将数据数组列表传递给箱线图,如下所示:

    import numpy as np
    import matplotlib.pyplot as plt
    
    x1 = 10*np.random.random(100)
    x2 = 10*np.random.exponential(0.5, 100)
    x3 = 10*np.random.normal(0, 0.4, 100)
    plt.boxplot ([x1, x2, x3])
    

    我唯一不确定的是,如果您希望每个箱线图具有不同的颜色等。通常它不会以不同的颜色绘制

    【讨论】:

      【解决方案2】:

      使用return_type='axes' 获取a1.boxplot 以返回matplotlib Axes 对象。 然后使用ax=ax 将该轴传递给boxplot 的第二次调用。这将导致两个箱线图绘制在相同的轴上。

      a1=a[['kCH4_sync','week_days']]
      ax = a1.boxplot(by='week_days', meanline=True, showmeans=True, showcaps=True, 
                      showbox=True, showfliers=False, return_type='axes')
      a2 = a[['CH4_sync','week_days']]
      a2.boxplot(by='week_days', meanline=True, showmeans=True, showcaps=True, 
                 showbox=True, showfliers=False, ax=ax)
      

      【讨论】:

      • 关于如何使箱线图并排而不是彼此重叠的任何建议?
      • @spizwhiz:使用fig, (ax1, ax2) = plt.subplots(nrows=2) 设置轴。然后将所需的轴传递给箱线图调用:a1.boxplot(..., ax=ax1)a2.boxplot(..., ax=ax2)
      • 感谢您的回复。除非我误解你,否则你在这里所说的相当于:a1.boxplot(column = ['kCH4_sync','week_days'], by='week_days',layout=(2,1)) 我认为我没有很好地解释自己:我正在寻找像色调一样的并排情节,但不会融化数据框:stackoverflow.com/questions/16592222/matplotlib-group-boxplots
      • 我不完全清楚您在寻找什么。请发布一个包含所有详细信息的新问题。所需输出的可运行设置和描述(或绘图)将非常有帮助。
      【解决方案3】:

      使用pandas很容易:

      import numpy as np
      import matplotlib.pyplot as plt
      import pandas as pd
      
      col1 = np.random.random(10)
      col2 = np.random.random(10)
      
      DF = pd.DataFrame({'col1': col1, 'col2': col2})
      
      ax = DF[['col1', 'col2']].plot(kind='box', title='boxplot', showmeans=True)
      
      plt.show()
      

      请注意,当为此使用 Pandas 时,最后一个命令 (ax = DF[[...) 会打开一个新图形。我仍在寻找一种将其与现有子图相结合的方法。

      【讨论】:

        猜你喜欢
        • 2013-01-14
        • 2019-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多