我有这个简单的python代码,可以生成一个简单的X date y十进制图。
我的目标是将刻度设置为小于最小值的一个单位 TO 大于最大值的一个单位,请参见下面的代码和图。
我不明白为什么它不能正确显示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()
答案 0 :(得分:0)
您为日期提供整数。因此Matplotlib将其视为任何数字。并且它试图对彼此靠近的大量数字很聪明:
默认格式化程序标识何时绘制的x数据是 小范围位于大偏移量之上。为了减少机会 ticklabels与刻度线重叠,标记为固定值的增量 偏移量。例如:
ax.plot(np.arange(2000, 2010), range(10))
将具有0-9
的刻度+2e3
的偏移量。如果不希望这样做,请关闭 默认格式化程序的偏移量:
ax.get_xaxis().get_major_formatter().set_useOffset(False)
设置 rcParamaxes.formatter.useoffset=False
将其全局关闭或设置 不同的格式化程序。 来自docs of thematplotlib.ticker
module。
答案 1 :(得分:0)
我通过转换为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()