Python matplotlib.pyplot集合和集合标签问题
我想使用setxticks和setxticklabels来控制标签的数量,但图表看起来不太正确Python matplotlib.pyplot集合和集合标签问题,python,pandas,matplotlib,Python,Pandas,Matplotlib,我想使用setxticks和setxticklabels来控制标签的数量,但图表看起来不太正确 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(
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')]
如果我将x轴日期绘制为datetime,它会工作
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的天数视为abcissa(),如所述,并且您选择的刻度为0到6 原始的xtick是(在设置自定义标记之前,您可以通过调用
ax.get_xticks()
自己检查):
数组([18262,18322,18383,18444,18506,18567,18628.]))
您既可以不更改自动选择的刻度(删除ax.setxticks(np.arange(7))
),也可以在设置它们时使用正确的值(实际上不需要,因为这些值不会更改,但我将其保留在这里,因为可能对将来的人有用):
ax.set\u xticks(ax.get\u xticks())
月=pd.日期范围('2020-01','2021-01',期间=7).标准时间('%Y-%m')。时间列表()
ax.set_xticklabel(月)
错误源于matplotlib将1970-01-01 UTC的天数视为abcissa(),如所述,并且您选择的刻度为0到6
原始的xtick是(在设置自定义标记之前,您可以通过调用ax.get_xticks()
自己检查):
数组([18262,18322,18383,18444,18506,18567,18628.]))
您既可以不更改自动选择的刻度(删除ax.setxticks(np.arange(7))
),也可以在设置它们时使用正确的值(实际上不需要,因为这些值不会更改,但我将其保留在这里,因为可能对将来的人有用):
ax.set\u xticks(ax.get\u xticks())
月=pd.日期范围('2020-01','2021-01',期间=7).标准时间('%Y-%m')。时间列表()
ax.set_xticklabel(月)