Как увеличить частоту xticks / labels для дат на графике?

Я пытаюсь увеличить частоту ярлыков и ярлыков дат на барплоте. В настоящее время он помещает ярлыки на каждый второй месяц, и я хотел бы увеличить его до каждого месяца.

Код, который у меня есть до сих пор:

fig = plt.figure() ax = plt.subplot(1,1,1) # defining the spacing around the plots plt.subplots_adjust(left = 0.125, bottom = 0.1, right = 0.9, top = 0.9, wspace = 0.2, hspace = 0.35) handles = [] # for bar plot bar1 = ax.bar(dates, clim[loc,:], label = 'climatology (1981 - 2013)', color='darkgray', width=width_arr[:], linewidth=0, alpha=0.5) handles.append(bar1) bar2 = ax.bar(dates, chirps[i,loc,:], label = str(year1), color = 'blue', width=width_arr[:], linewidth=0, alpha=0.45) handles.append(bar2) # setting the plot tick labels for tick in ax.xaxis.get_major_ticks(): tick.label.set_fontsize(10) for tick in ax.yaxis.get_major_ticks(): tick.label.set_fontsize(10) ax.set_ylabel("Precipitation", fontsize=10) # plotting the legend within the plot space plt.legend( loc = 'upper left', numpoints=1, ncol = 3, prop={'size':10}) plt.ylim(0, 110) # rotating the tick marks to make best use of the x-axis space plt.xticks(rotation = '25') 

Вы можете указать xtick loactions в команде xticks . Поэтому в вашем случае это должно сделать трюк: вместо

 plt.xticks(rotation = '25') 

использование

 plt.xticks(dates,rotation = '25') 

Вот минимальный рабочий пример , иллюстрирующий ваш вопрос и исправление.

 import numpy as np import matplotlib.pyplot as plt # generate random data x = [1.0, 2.0, 3.0, 4.0, 5.0] y = np.random.rand(2,5) # setup the plot fig = plt.figure() ax = plt.subplot(1,1,1) # plot the data, only the bar command is important: bar1 = ax.bar(x, y[0,:], color='darkgray', width=0.5, linewidth=0, alpha=0.5) bar2 = ax.bar(x, y[1,:], color = 'blue', width=0.5, linewidth=0, alpha=0.45) # defining the xticks plt.xticks(rotation = '25') #plt.xticks(x,rotation = '25') plt.show() 

Это приведет к следующему рисунку:

вопрос

На этом рисунке мы видим гораздо больше ярлыков, чем мы надеялись, – что противоположно тому, что у вас было, однако один и тот же ответ.
Теперь, если вы измените команду plt.xticks (в приведенном выше примере вы можете прокомментировать одну строку и раскомментировать другую), эта цифра изменится на:

ответ

Тот факт, что y-данные изменились (из-за вызова np.random имеет значения. Однако вы можете видеть, что теперь у нас есть только x-тики в местах, указанных в x .

Если вы хотите пропустить определенные метки, я рекомендую использовать функцию arange numpy . arange , в отличие от linspace , допускает фиксированное приращение (третий входной аргумент). Вы можете заменить plt.xticks(x,rotation='25') кодом:

 # defining the xticks names = ['one', 'two', 'three', 'four', 'five'] x_tick_location = np.arange(np.min(x),np.max(x)+0.001,2.0) x_tick_labels = [names[x.index(xi)] for xi in x_tick_location] plt.xticks(x_tick_location,x_tick_labels,rotation = '25') 

Это даст вам следующий сюжет:

ответ 2

Есть несколько вещей, которые стоит отметить:

  • Я ввел names списков, которые содержат строки, которые будут использоваться в качестве тиковых меток. Я настоятельно рекомендую не устанавливать ярлыки, как это, потому что он отделяет ваши метки от ваших данных. Здесь это помогает проиллюстрировать работу xticks .
  • Расположение np.arange определяется с использованием np.arange как указано выше. Между min и max значениями x мы увеличиваем на 2 в этом примере. Это может помочь добавить небольшую сумму к max значению, чтобы гарантировать, что это можно считать (это связано с арифметикой с плавающей запятой).
  • Эта команда [names[x.index(xi)] for xi in x_tick_location] создает список, беря каждый элемент из x_tick_location , находя его индекс в исходном x и используя этот индекс для выбора соответствующего элемента в names .
  • Наконец, вы передаете как метки, так и метки меток в команду xticks .