gpt4 book ai didi

python - 使用 Seaborn 绘制具有最小/最大阴影的时间序列图

转载 作者:太空狗 更新时间:2023-10-29 22:21:32 25 4
gpt4 key购买 nike

我正在尝试根据以下数据创建 3 行时间序列图 Long Dataframe ,在 Week x Overload 图中,每个 Cluster 是不同的线。

我对每个(集群、周)对有多个观察(每个 atm 5 个,将有 1000 个)。我希望线上的点是该特定(集群、周)对的平均过载值,而带是它的最小/最大值。

目前正在使用以下代码来绘制它,但我没有得到任何线条,因为我不知道使用当前数据帧指定什么单位:

    ax14 = sns.tsplot(data = long_total_cluster_capacity_overload_df, value = "Overload", time = "Week", condition = "Cluster")

GIST Data

我觉得我仍然需要重新塑造我的数据框,但我不知道该怎么做。寻找看起来像这样的最终结果 enter image description here

最佳答案

基于 this incredible answer ,我能够创建一个猴子补丁来精美地做你正在寻找的东西。

import pandas as pd
import seaborn as sns
import seaborn.timeseries

def _plot_range_band(*args, central_data=None, ci=None, data=None, **kwargs):
upper = data.max(axis=0)
lower = data.min(axis=0)
#import pdb; pdb.set_trace()
ci = np.asarray((lower, upper))
kwargs.update({"central_data": central_data, "ci": ci, "data": data})
seaborn.timeseries._plot_ci_band(*args, **kwargs)

seaborn.timeseries._plot_range_band = _plot_range_band

cluster_overload = pd.read_csv("TSplot.csv", delim_whitespace=True)
cluster_overload['Unit'] = cluster_overload.groupby(['Cluster','Week']).cumcount()

ax = sns.tsplot(time='Week',value="Overload", condition="Cluster", unit="Unit", data=cluster_overload,
err_style="range_band", n_boot=0)

输出图: enter image description here

请注意,阴影区域与折线图中的真实最大值和最小值对齐!

如果您弄清楚为什么需要 unit 变量,请告诉我。


如果您不希望它们都在同一个图表上,那么:

import pandas as pd
import seaborn as sns
import seaborn.timeseries


def _plot_range_band(*args, central_data=None, ci=None, data=None, **kwargs):
upper = data.max(axis=0)
lower = data.min(axis=0)
#import pdb; pdb.set_trace()
ci = np.asarray((lower, upper))
kwargs.update({"central_data": central_data, "ci": ci, "data": data})
seaborn.timeseries._plot_ci_band(*args, **kwargs)

seaborn.timeseries._plot_range_band = _plot_range_band

cluster_overload = pd.read_csv("TSplot.csv", delim_whitespace=True)
cluster_overload['subindex'] = cluster_overload.groupby(['Cluster','Week']).cumcount()

def customPlot(*args,**kwargs):
df = kwargs.pop('data')
pivoted = df.pivot(index='subindex', columns='Week', values='Overload')
ax = sns.tsplot(pivoted.values, err_style="range_band", n_boot=0, color=kwargs['color'])

g = sns.FacetGrid(cluster_overload, row="Cluster", sharey=False, hue='Cluster', aspect=3)
g = g.map_dataframe(customPlot, 'Week', 'Overload','subindex')

产生以下内容,(如果您认为比例不合适,您显然可以玩纵横比) enter image description here

关于python - 使用 Seaborn 绘制具有最小/最大阴影的时间序列图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37767719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com