Я новичок в matplotlib, создаю график с использованием matplotlib.plot, ось x помечена датами, а Y - числами
x = ['2018-08-17', '2018-08-20', '2018-08-21', '2018-08-22', '2018-08-23', '2018-08-24', '2018-08-27', '2018-08-28', '2018-08-29', '2018-08-30', '2018-08-31','2018-11-29', '2018-11-30', '2018-12-03', '2018-12-04', '2018-12-05']
y = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Я преобразую эти строковые даты в действительную дату, используя следующий код
xdates = [dt.strptime(dstr,'%Y-%m-%d').date() for dstr in x]
после преобразования его в даты, я попытался
plt.xticks(range(0,len(xdates),2),xdates[1::2],rotation=50)
plt.plot(xdates,y)
, но это ничего не делает.
Я хочу, чтобы на оси х было меньше меток и меток.Предположим, что есть 15 дат, но я хочу, чтобы на оси х отображалось только 7 или 8 дат.Как мне этого добиться?
Ниже приведен метод, который я использую для создания графика тренда
def _create_trend_graph(self,element):
if(len(self.processed_data)!=0):
x_axis = element['X-Axis']
y_axis = []
plt.xticks(rotation=70)
plt.yticks(np.arange(0, 10001,element['Range']))
#plt.yticks(np.arange(0, 101,10))
figure = plt.gcf() # get current figure
figure.set_size_inches(14, 8)
for key in element.iterkeys():
if key.lower().startswith("y-axis"):
self.null_index = len(self.processed_data[element[key]])
for index in range(len(self.processed_data[element[key]])):
if self.processed_data[element[key]][index] == 'Null':
self.null_index = index
break
plt.plot(self.processed_data[x_axis][:self.null_index], list(map(float, self.processed_data[element[key]][:self.null_index])))
y_axis = y_axis + [str(element[key])]
#plt.legend(y_axis, prop={'size': 16})
plt.legend(y_axis)
plt.rcParams['font.size'] = 10.0
plt.savefig(self.monitored_folder+element['Title'], bbox_inches='tight', dpi = 100)
plt.close()
self._add_image_to_body(str(element['Title']), str(element['height']), str(element['width']))
else:
self._create_NA()
Здесь у элемента ['X-Axis'] у нас есть даты, например,
['2018-08-17', '2018-08-20', '2018-08-21', '2018-08-22', '2018-08-23', '2018-08-24 ',' 2018-08-27 ',' 2018-08-28 ',' 2018-08-29 ',' 2018-08-30 ',' 2018-08-31 ',' 2018-11-29 ', '2018-11-30', '2018-12-03', '2018-12-04', '2018-12-05']
и по оси Y мы помещаем числа.Таким образом, проблема в том, что мы получаем большое количество дат в элементе ['X-Axis'], так что это делает Xaxis очень многолюдным.также число дат в будущем может увеличиться.
Одним из решений является увеличение размера графика, но это последнее, что мы хотим сделать.Я не могу прикрепить изображение, так как у меня мало репутации.Как еще я могу показать вам изображение @ ImportanceofbeingErnest
после генерации графика мы передаем его методу ниже
def _add_image_to_body(self,image_name,height,width):
attachment = self.mail.Attachments.Add(self.monitored_folder+image_name+'.png')
attachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F", image_name.replace(' ','_'))
self.html += ("<img src=\"cid:" + image_name.replace(' ', '_') + '\"' + " height="+height+" width="+width+"><br><br>")