【问题标题】:Combine two dataframe boxplots in a twinx figure在 twinx 图中组合两个数据框箱线图
【发布时间】:2016-07-29 10:35:30
【问题描述】:

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

减少到最低限度,我尝试了以下方法:

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 上设置一些虚拟散点,但这并没有真正帮助。

【问题讨论】:

  • 你能举一个我们可以实际运行的随机数据的例子吗?

标签: pandas matplotlib axis boxplot


【解决方案1】:

最好的解决方案是连接数据框以进行绘图并使用掩码。在创建掩码时,我们使用dfs == dfs | dfs.isnull()True 创建一个完整矩阵,然后查询所有不是'E''F' 的列名。这给出了一个 2D 矩阵,仅允许您绘制前四个框,因为最后两个框被遮盖(因此它们的刻度确实出现在底部)。使用反向掩码~mask,您可以在自己的轴上绘制后两个并掩蔽前四个。

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2021-01-25
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2020-10-19
    相关资源
    最近更新 更多