Python 为什么勾号不适用于日期格式?

Python 为什么勾号不适用于日期格式?,python,matplotlib,Python,Matplotlib,我有一个简单的python代码,它生成一个简单的X日期y十进制图 我的目标是将刻度设置为小于最小值的一个单位到小于最大值的一个单位,请参见下面的代码和图表 我不明白为什么它不能正确地显示X记号,Y记号显示得很好 import matplotlib.pyplot as plt import pandas as pd fig = plt.figure(facecolor="#979899") ax = plt.gca() ax.set_facecolor("#d1d1d1") ax.set_xli

我有一个简单的python代码,它生成一个简单的X日期y十进制图

我的目标是将刻度设置为小于最小值的一个单位到小于最大值的一个单位,请参见下面的代码和图表

我不明白为什么它不能正确地显示X记号,Y记号显示得很好

import matplotlib.pyplot as plt
import pandas as pd

fig = plt.figure(facecolor="#979899")
ax = plt.gca()
ax.set_facecolor("#d1d1d1")
ax.set_xlim(pd.to_datetime(["2018-11-18"]),pd.to_datetime(["2018-11-22"]))

plt.grid(True)
plt.title("This is a title",fontsize=16)

plt.yticks([0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0])
plt.xticks(pd.to_datetime(["2018-11-18","2018-11-20","2018-11-22"]))

x1 = pd.to_datetime(["2018-11-19","2018-11-20","2018-11-21"])
y1 = [0.18,0.32,0.21]


for i,item in enumerate(y1):
    xP = x1[i]
    yP = y1[i]
    plt.text(xP,yP,str(item)+"%",fontsize=11)

plt.scatter(x1,y1)
plt.plot(x1,y1)
plt.show()

您为日期提供整数。所以Matplotlib将其视为任何数字。它还试图巧妙地处理大量紧密相连的数据:

默认格式设置程序标识正在打印的x数据何时为 在一个大的偏移上的小范围。以减少 ticklabels重叠刻度标记为固定方向上的增量 抵消。例如:

ax.plot(np.arange(2000,2010),范围(10))
将带有勾号
0-9
偏移量
+2e3
。如果不需要这样做,请关闭 默认格式化程序上的偏移量:

ax.get\u xaxis().get\u major\u formatter().set\u usecoffset(False)
设置 rcParam
axes.formatter.useoffset=False
全局关闭它,或设置 一个不同的格式化程序。 这是从


我通过转换为datetime对象解决了这个问题。在下面找到解决方案:

import matplotlib.pyplot as plt
import datetime

fig = plt.figure(facecolor="#979899")
ax = plt.gca()
ax.set_facecolor("#d1d1d1")
plt.grid(True)
plt.title("This is a title",fontsize=16)

plt.xticks([datetime.date(2018,11,20),datetime.date(2018,11,21),datetime.date(2018,11,22)],["11/20","11/21","11/22"])
plt.yticks([0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0],["0.0","0.1","0.2","0.3","0.4","0.5","0.6","0.7","0.8","0.9","1.0"])

x1 = [datetime.date(2018,11,20),datetime.date(2018,11,21),datetime.date(2018,11,22)]
y1 = [0.18,0.32,0.21]

for i,item in enumerate(y1):
    xP = x1[i]
    yP = y1[i]
    plt.text(xP,yP,str(item)+"%",fontsize=11)

plt.plot(x1,y1)
plt.show()

“为什么”的答案是:
matplotlib
根本不知道您打算将x轴数字视为邮戳。默认情况下,Python和matplotlib都假定8位文字是大约2000万的十进制数字。如果你的问题真的是“如何在x轴上用邮票绘图?”然后,通过谷歌搜索
matplotlib日期刻度标签
可以从matplotlib项目自己的图库中找到以下示例代码:哦,我完全明白你在说为什么要在数据范围之外显示刻度?如果你只想快速而脏的图形,你可以在x轴上使用字符串
x1=['20181120'、'20181121'、'20181122']
。但这只有在日期增加且相隔一天的情况下才有效。