python - 如何用pandas包为python制作的子图冲掉boxplot的默认副标题

Posted

技术标签:

【中文标题】python - 如何用pandas包为python制作的子图冲掉boxplot的默认副标题【英文标题】:How to flush away the default suptitle of boxplot with subplots made by pandas package for python 【发布时间】:2014-10-15 08:38:09 【问题描述】:

在以下示例中,我尝试为四个“功率”级别制作“发射”与“电压”的箱线图,每个功率级别占用一个子图。

fig = plt.figure(figsize=(16,9))
i = 0
for Power in [10, 20, 40, 60]:
    i = i+1
    ax = fig.add_subplot(2,2,i)
    subdf = df[df.Power==Power]
    bp = subdf.boxplot(column='Emission', by='Voltage', ax=ax)
fig.suptitle('My Own Title')

问题是

fig.suptitle('My Own Title')

命令不会清除默认的“按电压分组”字幕。我在这里想念什么?还是bug?

谢谢。

【问题讨论】:

也许标题与轴相关,而不是数字。试试ax.set_title 这个图中我有4个轴,字幕不应该属于这个图而不是一个轴吗? 看起来很合理。但是如果没有您的数据框,我将无法运行您的示例,因此很难确切知道发生了什么。 【参考方案1】:

这些是由suptitle() 调用生成的,超级标题是fig 对象的子对象(是的,suptitle() 被调用了 4 次,每个子图一个)。

修复它:

df = pd.DataFrame('Emission': np.random.random(12),
                   'Voltage': np.random.random(12),
                   'Power': np.repeat([10,20,40,60],3))
fig = plt.figure(figsize=(16,9))
i = 0
for Power in [10, 20, 40, 60]:
    i = i+1
    ax = fig.add_subplot(2,2,i)
    subdf = df[df.Power==Power]
    bp = subdf.boxplot(column='Emission', by='Voltage', ax=ax)
fig.texts = [] #flush the old super titles
plt.suptitle('Some title')

【讨论】:

谢谢,成功了。 “fig.texts”也在这里解释:***.com/questions/10559144/… 唯一的问题是,当您有 4 个像这种情况下的子图时,fig.texts 包含 4 个matplotlib.Text.text 对象(pandas 0.14.1),清理它可能是一个更好的主意首先...【参考方案2】:

您也可以在不先手动创建图形的情况下执行此操作:

ax = df.boxplot(by=["some_column"])
ax.get_figure().suptitle("")

【讨论】:

【参考方案3】:

在有人能给出更好的答案之前,这里有一个技巧,假设新标题比旧标题长。

fig.suptitle('My Own Title',backgroundcolor='white', color='black')

它基本上隐藏了旧标题,而不是刷新它。

【讨论】:

以上是关于python - 如何用pandas包为python制作的子图冲掉boxplot的默认副标题的主要内容,如果未能解决你的问题,请参考以下文章

Python图形绘制:如何用Matplotlib和pandas绘图?

如何用 numpy/pandas 计算“子矩阵”条目的总和?

如何用python将dataframe更新原来的sql表

如何用pandas将某列进行唯一编码后,修改原dataframe

如何用pandas将某列one-hot编码后,修改原dataframe

如何用python做数据分析