- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)