在pandas或matplotlib中的一个图中绘制多个boxplot?

时间:2014-11-21 12:12:40

标签: python matplotlib pandas

我有两个箱图

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)

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

3 个答案:

答案 0 :(得分:5)

使用return_type='axes'a1.boxplot返回matplotlib Axes对象。 然后使用boxplot将这些轴传递给ax=ax的第二个电话。这将导致两个箱图在同一轴上绘制。

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)

答案 1 :(得分:3)

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

import nump as np
import matplotlib.pyplot as plt

x1 = 10*np.random.random(100)
x = 10*np.random.exponential(0.5, 100)
x = 10*np.random.normal(0, 0.4, 100)
plt.boxplot ([x1, x2, x3])

唯一认为我不确定的是你是否希望每个箱图都有不同的颜色等。

答案 2 :(得分:0)

使用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[[...) 会打开一个新图形。我仍在寻找将其与现有子图结合的方法。