簡體   English   中英

matplotlib.pyplot set_xticks 和 set_xticklabels 問題

[英]matplotlib.pyplot set_xticks and set_xticklabels issue

我想使用 set_xticks 和 set_xticklabels 來控制標簽的數量,但圖表看起來不正確。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.dates as mdates
import seaborn as sns

d = {'sel_date': pd.date_range('2020-01-01', '2021-01-01', 24), 'ID':list('abbb')*6, 'index':np.random.randint(10, size=24)}
df = pd.DataFrame(data=d)
plot = pd.pivot_table(df, values='index', index=['sel_date'],
                    columns=['ID'], aggfunc=np.mean)
plot.fillna(0, inplace=True)
date_fmt = mdates.DateFormatter("%Y-%m")

fig, ax = plt.subplots(figsize=(8, 4))
ax = sns.lineplot(data=plot)
ax.set_xticks(np.arange(7))
months = pd.date_range('2020-01', '2021-01', periods=7).strftime('%Y-%m').tolist()
ax.set_xticklabels(months)
plt.show()

它返回

[Text(0, 0, '2020-01'),
 Text(1, 0, '2020-03'),
 Text(2, 0, '2020-05'),
 Text(3, 0, '2020-07'),
 Text(4, 0, '2020-09'),
 Text(5, 0, '2020-11'),
 Text(6, 0, '2021-01')]

在此處輸入圖像描述

如果我 plot 將 x 軸日期作為日期時間,它可以工作

import matplotlib.dates as mdates
date_fmt = mdates.DateFormatter("%Y-%m")
fig, ax = plt.subplots(figsize=(8, 4))
ax = sns.lineplot(data=plot)
ax.set(xlabel='')
ax.xaxis.set_major_formatter(date_fmt)

在此處輸入圖像描述

我想知道為什么第一個圖表不起作用。 謝謝你

該錯誤來自這樣一個事實,即 matplotlib 將 1970-01-01 UTC 的天數視為r-beginners所述的天數(請參閱文檔),並且您選擇的刻度為 0 到 6。

原始 xticks 是(您可以在設置自定義刻度之前調用ax.get_xticks()檢查):

array([18262., 18322., 18383., 18444., 18506., 18567., 18628.])

您可以不更改自動選擇的刻度(刪除ax.set_xticks(np.arange(7)) )或在設置時使用正確的值(不是真的必要,因為值不會改變,但我會留下它在這里,因為將來可能對某人有用):

ax.set_xticks(ax.get_xticks())
months = pd.date_range('2020-01', '2021-01', periods=7).strftime('%Y-%m').tolist()
ax.set_xticklabels(months)

暫無
暫無

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

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