Основы 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)
Выходной График:
Обратите внимание, что заштрихованные области выстраиваться с истинным максимумом и минимумов в линейном графике!
Если вы считаете, почему переменная 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')
Который производит следующее (можно, очевидно, играть с соотношением сторон, если вы думаете, что пропорции выключены)
Лучшее, что я мог придумать до сих пор использует sns.pointplot и получить это: https://gyazo.com/425b31b23f9d5009c12502f3113361ef –
честно, то, что сюжет не совсем то, что вы ищете для? хотите ли вы, чтобы межстрочное затенение было меньше, а граничные линии были темнее? –
Это похоже на то, что я ищу, но если я его расширю, это фактические доверительные интервалы (вертикальные линии для каждой точки), а не непрерывные таймеры, так сказать. И да, я хотел бы, чтобы межстрочное затенение было меньше. –