Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib.pyplot集合和集合标签问题_Python_Pandas_Matplotlib - Fatal编程技术网

Python matplotlib.pyplot集合和集合标签问题

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(

我想使用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('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(月)