Pandas 在twinx图中组合两个dataframe箱线图

Pandas 在twinx图中组合两个dataframe箱线图,pandas,matplotlib,axis,boxplot,Pandas,Matplotlib,Axis,Boxplot,我想在一个图形中显示两个数据帧作为箱线图。 由于两个数据帧中的每一个都有不同的值范围,我希望将它们组合成一个twinx图 降到最低限度后,我尝试了以下方法: import pandas as pd import numpy as np import matplotlib.pyplot as plt df1 = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD')) df2 = pd.DataFram

我想在一个图形中显示两个数据帧作为箱线图。 由于两个数据帧中的每一个都有不同的值范围,我希望将它们组合成一个twinx图

降到最低限度后,我尝试了以下方法:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df1 = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))

df2 = pd.DataFrame(np.random.randint(100,200,size=(100, 2)), columns=list('EF'))

fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

df1.boxplot(ax=ax1)
df2.boxplot(ax=ax2)

plt.show()
结果预期不是它应该看起来的样子(实际上,在绘图上应该有6个框!)

我怎样才能使箱线图彼此相邻?
我试图在ax1和ax2上设置一些虚拟散点,但这并没有真正起到作用。

最好的解决方案是连接数据帧以进行打印,并使用遮罩。在创建掩码时,我们使用
dfs==dfs | dfs.isnull()
创建一个带有
True
的完整矩阵,然后查询所有不是
'E'
'F'
的列名。这将提供一个二维矩阵,允许您仅绘制前四个框,因为最后两个框被遮罩(因此它们的记号确实显示在底部)。使用反向遮罩~遮罩可以在其自己的轴上绘制最后两个,并遮罩前四个

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df1 = pd.DataFrame(np.random.randint(  0,100,size=(100, 4)), columns=list('ABCD'))
df2 = pd.DataFrame(np.random.randint(100,200,size=(100, 2)), columns=list('EF'  ))

dfs = pd.concat([df1, df2])
mask = ((dfs == dfs) | dfs.isnull()) & (dfs.columns != 'E') & (dfs.columns != 'F')

fig, ax1 = plt.subplots()
dfs[mask].boxplot()

ax2 = ax1.twinx()
dfs[~mask].boxplot()

plt.show()

你能用随机数据做个例子,让我们实际运行吗?