首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dataframe中的列为海上绘图的背景着色。

使用dataframe中的列为海上绘图的背景着色。
EN

Stack Overflow用户
提问于 2020-03-27 14:06:28
回答 1查看 2.2K关注 0票数 8

问题

如何使用海航的列对数据帧绘图的背景进行阴影或着色

代码段

代码语言:javascript
复制
import numpy as np
import seaborn as sns; sns.set()
import matplotlib.pyplot as plt
fmri = sns.load_dataset("fmri")
fmri.sort_values('timepoint',inplace=True)
ax = sns.lineplot(x="timepoint", y="signal", data=fmri)
arr = np.ones(len(fmri))
arr[:300] = 0
arr[600:] = 2
fmri['background'] = arr

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

产生了这个图表:

期望输出

根据新列'background'和任何调色板或用户定义的颜色中的值,我希望得到如下内容:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-27 14:46:52

假设背景在时间点上不重叠,ax.axvspan()可以为您工作。

代码语言:javascript
复制
import numpy as np
import seaborn as sns; sns.set()
import matplotlib.pyplot as plt
fmri = sns.load_dataset("fmri")
fmri.sort_values('timepoint',inplace=True)
arr = np.ones(len(fmri))
arr[:300] = 0
arr[600:] = 2
fmri['background'] = arr
fmri['background'] = fmri['background'].astype(int).astype(str).map(lambda x: 'C'+x)

ax = sns.lineplot(x="timepoint", y="signal", hue="event", data=fmri)
ranges = fmri.groupby('background')['timepoint'].agg(['min', 'max'])
for i, row in ranges.iterrows():
    ax.axvspan(xmin=row['min'], xmax=row['max'], facecolor=i, alpha=0.3)

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60887648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档