Python嵌套绘图并为条形图添加自定义标注.docx

Python嵌套绘图并为条形图添加自定义标注.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

Python嵌套绘图并为条形图添加自定义标注

论文绘图时经常需要多图嵌套,正好最近绘图用到了,记录一下使用Python实现多图嵌套的过程。

首先,实现Seaborn分别绘制折线图和柱状图。

绘制折线图

importseabornassns

importmatplotlib.pyplotasplt

importwarnings

warnings.filterwarnings(ignore,use_inf_as_na)

#获取绘图数据

df_fmri=sns.load_dataset(fmri)

#绘制折线图

sns.lineplot(data=df_fmri,x=timepoint,y=signal,hue=event)

#创建绘图数据

df_bar=df_fmri[[subject,signal]].groupby(subject,observed=True).agg(max).reset_index()

#绘制条形图

ax_bar=sns.barplot(

data=df_bar,

x=subject,y=signal,

palette=Set2,

接下来实现条形图与折线图的嵌套,核心是使用inset_axes函数创建一个新的轴,然后再绘制第二个图时指定绘图的轴为刚才新建的轴。

frommpl_toolkits.axes_grid1.inset_locatorimportinset_axes

importmatplotlib.pyplotasplt

#获取绘图数据

df_fmri=sns.load_dataset(fmri)

df_bar=df_fmri[[subject,signal]].groupby(subject,observed=True).agg(max).reset_index()

#绘制折线图

ax=sns.lineplot(data=df_fmri,x=timepoint,y=signal,hue=event)

plt.legend(loc=upperleft)

#使用inset_axes函数添加一个轴,用来显示条形图

ax_bar=inset_axes(

ax,#父轴

width=40%,height=50%,#新轴相对于父轴的长宽比例

loc=lowerleft,#新轴的锚点相对于父轴的位置

bbox_to_anchor=(0.55,0.45,1,1),#新轴的bbox

bbox_transform=ax.transAxes#bbox_to_anchor的坐标基准

#绘制条形图

ax_bar=sns.barplot(

data=df_bar,

x=subject,y=signal,

palette=Set2,

ax=ax_bar

可以看到,右上角的条形图显得很拥挤,x轴标注相互重叠比较严重,因此,考虑将条形图由纵向变为横向,在Seaborn绘图时交换x轴和y轴就能实现。此外,bar上方的空间也比较大,考虑将x轴的标注标注到bar上方,以进一步节约空间。bar的标注可以通过ax.bar_label()函数实现,该函数不仅可以直接标注每个bar的数值,也可以自定义要标注的内容和格式。修改后的代码和结果图如下:

frommpl_toolkits.axes_grid1.inset_locatorimportinset_axes

importmatplotlib.pyplotasplt

#准备数据

df_fmri=sns.load_dataset(fmri)

df_bar=df_fmri[[subject,signal]].groupby(subject,observed=True).agg(max).reset_index()

#绘制折线图

ax=sns.lineplot(data=df_fmri,x=timepoint,y=signal,hue=event)

plt.legend(loc=upperleft)

#使用inset_axes函数添加一个轴,用来显示条形图

ax_bar=inset_axes(

ax,#父轴

width=47%,height=52%,#新轴相对于父轴的长宽比例

loc=lowerleft

文档评论(0)

152****4498 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档