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 计算“子矩阵”条目的总和?
如何用pandas将某列进行唯一编码后,修改原dataframe