Вот моя попытка решения.
Отказ от ответственности, возможно, есть лучший способ сделать это, и я просто скомбинировал что-то, чтобы посмотреть, смогу ли я добиться некоторого снижения помех. Я не понимаю код полностью, но я добился результата.
Тем не менее, я использовал этот пост , чтобы найти решение, и оно могло бы послужить полезным ресурсом и лучшим объяснением того, что я придумал.
Код решения
import numpy as np
import matplotlib.pyplot as plt
from dateutil.parser import parse
date_strings = ['2020-01-20 03:32:44',
'2020-03-26 05:13:07',
'2020-03-26 13:32:09',
'2020-03-26 23:57:49',
'2020-03-27 15:30:00',
'2020-03-28 00:04:32',
'2020-03-28 13:26:15',
'2020-03-29 00:11:22',
'2020-04-02 00:30:00',
'2020-04-06 14:00:00']
dates = []
for date in date_strings:
dt = parse(date)
print(dt.date())
dates.append(dt.date())
x1 = np.array([x for x in range(10)])
x = dates
y = [x+60 for x in range(10)]
plt.xticks(ticks=dates,labels=dates,rotation='90')
#solution starts
N = 10
plt.gca().margins(x=0)
plt.gcf().canvas.draw()
tl = plt.gca().get_xticklabels()
maxsize = max([t.get_window_extent().width for t in tl])
m = 0.01 # inch margin
s = maxsize/plt.gcf().dpi*N+2*m
margin = m/plt.gcf().get_size_inches()[0]
plt.gcf().subplots_adjust(left=margin, right=25.-margin)
plt.gcf().set_size_inches(s, plt.gcf().get_size_inches()[1])
plt.plot(x,y)
plt.scatter(x,y)
plt.show()
Результирующий график
Незаполненный график с пробелом между отметками по оси X
Примечания
plt.gcf().subplots_adjust(left=margin, right=25.-margin)
Изменение параметра right изменит интервал x-ticks. Однако эта текущая реализация имеет компромисс:
Точность и интервал VS Ширина изображения
Чем меньше число, тем меньше ширина занимает пространство изображения. Однако изображение теряет Точность и Интервал для представления точек графика.
Я обнаружил, что 25 - это хорошее число за счет дорогой ширины изображения. Я не уверен, что это будет проблемой, но подумал, что упомяну об этом.
m
Имеет небольшое влияние на ширину изображения, если изменить его в одиночку.
Чем меньше число, тем меньше ширина изображения.
plt.xticks(ticks=dates,labels=dates,rotation='90')
[R] otation влияет на интервал графика, аналогично вправо параметр.
Чем ближе число становится параллельным оси x, тем хуже точность и интервал, тем дешевле ширина изображения.
Чем ближе число становится параллельным оси y, тем лучше Точность и интервал, более дорогая ширина изображения.
Я понимаю, что в исходном коде было 30 для этого параметра вращение . Не уверен, что это важно для поддержки в решении, но я подумал, что упомяну об этом.
Надеюсь, это помогло.