![](/img/trans.png)
[英]Where to put set_xticks and set_xticklabels in animation so as to label correctly without "flickering?"
[英]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.