首页 > 解决方案 > Python Seaborn 图表 - 阴影区域

问题描述

很抱歉我的菜鸟问题,但是如何在 seaborn 图表的上下线之间添加阴影区域/颜色?

我正在处理的主要代码如下:

plt.figure(figsize=(18,10))
sns.set(style="darkgrid")
palette = sns.color_palette("mako_r", 3)
sns.lineplot(x="Date", y="Value",  hue='Std_Type', style='Value_Type', sizes=(.25, 2.5), palette = palette, data=tbl4)

在此处输入图像描述

想法是获得如下效果(来自 seaborn 网站的示例):但我无法复制效果,尽管我的数据结构与 fmri 几乎相同 seaborn 示例)

来自 seaborn 链接

 import seaborn as sns
 sns.set(style="darkgrid")

 # Load an example dataset with long-form data
 fmri = sns.load_dataset("fmri")

 # Plot the responses for different events and regions
 sns.lineplot(x="timepoint", y="signal",
         hue="region", style="event",
         data=fmri)

在此处输入图像描述

你有什么想法吗?我试图更改图表样式,但如果我转到distplotrelplot,例如,x_axis无法显示时间范围...

标签: pythonmatplotlibcolorsseabornarea

解决方案


检查此代码:

# import
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
sns.set(style = 'darkgrid')

# data generation
time = pd.date_range(start = '2006-01-01', end = '2020-01-01', freq = 'M')
tbl4 = pd.DataFrame({'Date': time,
                     'down': 1 - 0.5*np.random.randn(len(time)),
                     'up': 4 + 0.5*np.random.randn(len(time))})

tbl4 = tbl4.melt(id_vars = 'Date',
                 value_vars = ['down', 'up'],
                 var_name = 'Std_Type',
                 value_name = 'Value')

# figure plot
fig, ax = plt.subplots(figsize=(18,10))

sns.lineplot(ax = ax,
             x = 'Date',
             y = 'Value',
             hue = 'Std_Type',
             data = tbl4)

# fill area
plt.fill_between(x = tbl4[tbl4['Std_Type'] == 'down']['Date'],
                 y1 = tbl4[tbl4['Std_Type'] == 'down']['Value'],
                 y2 = tbl4[tbl4['Std_Type'] == 'up']['Value'],
                 alpha = 0.3,
                 facecolor = 'green')

plt.show()

这给了我这个情节:

在此处输入图像描述

由于我无权访问您的数据,因此我生成了随机数据。用你的替换它们。
阴影区域使用plt.fill_between此处的文档)完成,您可以在其中指定x数组(两条曲线共有),区域的上限和下限为y1and y2,以及可选的颜色及其透明度,分别使用facecolorandalpha参数。


您不能通过ci参数来执行此操作,因为它用于显示数据的置信区间


推荐阅读