簡體   English   中英

在 x 軸上為日歷周 YYYYWW 繪制 Seaborn 多條線圖

[英]Seaborn multiple lineplots for calendar weeks YYYYWW on x-axis

我對 seaborn 線圖的 x 軸值有一些問題:

import pandas as pd
import seaborn as sns

# data
df = pd.DataFrame(columns=['calendar_week', 'product_name', 'value'],
                  data=[['201850', 'product01', 1], ['201905', 'product01', 10], ['201910', 'product01', 7],
                       ['201840', 'product02', 4], ['201911', 'product02', 9], ['201917', 'product02', 17], ['201918', 'product02', 12]])

# plot
sns.lineplot(data=df, x='calendar_week', y='value', hue='product_name');

如果 calendar_week 值是字符串,它會在第一個圖形之后繪制第二個圖形。 如果 calendar_week 值是整數,它會自動填充從 201852 到 201899 的數據。 僅使用給定的 calendar_week 值在一個排序的 x 軸上繪制兩個圖的最佳方法是什么?

這是以 calendar_week 為字符串的圖: 將 x 軸值作為字符串繪制

這是帶有 calendar_week 為 int 的圖: 將 x 軸值作為 int 繪圖

感謝幫助。

這有點迂回,但我認為您首先需要將周數轉換為實際日期,繪圖,然后在 x 軸上使用自定義格式化程序再次顯示周數。

df = pd.DataFrame(columns=['calendar_week', 'product_name', 'value'],
                  data=[['201850', 'product01', 1], ['201905', 'product01', 10], ['201910', 'product01', 7],
                       ['201840', 'product02', 4], ['201911', 'product02', 9], ['201917', 'product02', 17], ['201918', 'product02', 12]])

df['date'] = pd.to_datetime(df.calendar_week+'0', format='%Y%W%w')
# plot
fig, ax = plt.subplots()
sns.lineplot(data=df, x='date', y='value', hue='product_name', ax=ax)
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter("%Y-%W"))
fig.autofmt_xdate()

在此處輸入圖片說明

我來自德國,我必須處理 ISO 周,所以我最終這樣做了:

import pandas as pd
import seaborn as sns
import datetime
import matplotlib
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()

# data
df = pd.DataFrame(columns=['calendar_week', 'product_name', 'value'],
                  data=[['201850', 'product01', 1], ['201905', 'product01',     10], ['201910', 'product01', 7],
                       ['201840', 'product02', 4], ['201911', 'product02', 9], ['201917', 'product02', 17], ['201918', 'product02', 12]])

# convert calendar weeks to date
df['date'] = df['calendar_week'].apply(lambda x: datetime.datetime.strptime(x + '-1', '%G%V-%u'))

# plot
fig, ax = plt.subplots()
sns.lineplot(data=df, x='date', y='value', hue='product_name', ax=ax)
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%G%V'))
fig.autofmt_xdate()
plt.show();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM