python - 使用数据框中的列为 seaborn 图的背景着色

标签 python pandas dataframe graph seaborn


如何为 seaborn 的背景着色或着色使用 dataframe 的列绘图?
代码片段

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)
产生了这张图:
Actual output
期望输出
根据新列 'background' 中的值,我想要什么和任何 palette或用户定义 colors ,像这样:
Desired output

最佳答案

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

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)


enter image description here

关于python - 使用数据框中的列为 seaborn 图的背景着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60887648/

相关文章:

python - 我想测试单个网页对多个请求的响应状态(查看该网页是否有404、5XX请求)

python - 使用 numpy 进行快速蒙特卡洛模拟?

python - 给定段的长度和段中的偏移量,如何从 Pandas 的开始创建偏移量?

pandas - PySpark 数据帧 Pandas UDF 返回空数据帧

python - 错误 : (-215) nimages > 0 in function calibrateCamera using Python and OpenCV

python - 将字符串类型、三级MultiIndex的pandas dataframe转换为数字类型对象

python - 如何在不递增的情况下获取迭代器当前指向的项目?

python - 如何在 pandas 中设置日期时间地板操作的基础?

python - 如何制作更高效的代码来搜索 Pandas 列中的多个字符串

python - 如何找到在 Graphlab SFrame 中保存时引发错误的特定行?