Почему галочки не работают для формата даты? - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть этот простой код Python, который генерирует простой график X даты и десятичной дроби.

Моя цель состояла в том, чтобы установить тики на единицу меньше минимального 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()

enter image description here enter image description here

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Я решил проблему путем преобразования объекта 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()
0 голосов
/ 23 ноября 2018

Вы предоставляете целые числа для дат.Так что Matplotlib относится к этому как к любому числу.И он пытается быть осторожным с большими числами, которые находятся близко друг к другу:

Форматер по умолчанию определяет, когда наносимые на экран x-данные находятся в небольшом диапазоне поверх большого смещения.Чтобы уменьшить вероятность того, что метки перекрываются, метки помечаются как дельты с фиксированным смещением.Например:

ax.plot(np.arange(2000, 2010), range(10)) будет иметь отметку 0-9 со смещением +2e3.Если это нежелательно, отключите использование смещения в форматере по умолчанию:

ax.get_xaxis().get_major_formatter().set_useOffset(False), установите rcParam axes.formatter.useoffset=False, чтобы отключить его глобально, или установите другой форматер.Это из документов matplotlib.ticker модуля .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...