Использование datetime в качестве тиков в Matplotlib

Я в основном пытаюсь построить график, где ось x представляет месяц года. Данные хранятся в numpy.array с размерами kx months . Здесь он следует за минимальным примером (мои данные не такие сумасшедшие):

 import numpy import matplotlib import matplotlib.pyplot as plt cmap = plt.get_cmap('Set3') colors = [cmap(i) for i in numpy.linspace(0, 1, len(complaints))] data = numpy.random.rand(18,12) y = range(data.shape[1]) plt.figure(figsize=(15, 7), dpi=200) for i in range(data.shape[0]): plt.plot(y, data[i,:], color=colors[i], linewidth=5) plt.legend(loc='center left', bbox_to_anchor=(1, 0.5)) plt.xticks(numpy.arange(0, 12, 1)) plt.xlabel('Hour of the Day') plt.ylabel('Number of Complaints') plt.title('Number of Complaints per Hour in 2015') 

введите описание изображения здесь

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

Я смотрел на эти примеры:

http://matplotlib.org/examples/pylab_examples/finance_demo.html http://matplotlib.org/examples/pylab_examples/date_demo2.html

Но я не использую datetime .

2 Solutions collect form web for “Использование datetime в качестве тиков в Matplotlib”

Это альтернативный метод построения plot_date , который вы можете использовать, если ваша независимая переменная используется как datetime , вместо использования более общего метода построения plot :

 import datetime data = np.random.rand(24) #a list of time: 00:00:00 to 23:00:00 times = [datetime.datetime.strptime(str(i), '%H') for i in range(24)] #'H' controls xticklabel format, 'H' means only the hours is shown #day, year, week, month, etc are not shown plt.plot_date(times, data, fmt='H') plt.setp(plt.gca().xaxis.get_majorticklabels(), 'rotation', 90) 

введите описание изображения здесь

Преимущество этого заключается в том, что теперь вы можете легко контролировать плотность xticks, если мы хотим иметь галочку каждый час, мы plot_date эти строки после plot_date :

 ##import it if not already imported #import matplotlib.dates as mdates plt.gca().xaxis.set_major_locator(mdates.HourLocator()) 

введите описание изображения здесь

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

 def getMonthName(month_number): testdate=datetime.date(2010,int(month_number),1) return testdate.strftime('%b') 

Здесь я создал произвольную дату с правильным месяцем и вернулся в этом месяце. Проверьте документацию datetime на наличие доступных кодов формата, если это необходимо. Если это всегда проще, чем просто задать список вручную, это еще один вопрос. Теперь давайте построим несколько ежемесячных тестовых данных:

 import matplotlib.pyplot as plt import matplotlib.ticker as mtick import numpy as np x_data=np.arange(1,12.5,1) y_data=x_data**2 # Just some arbitrary data plt.plot(x_data,y_data) plt.gca().xaxis.set_major_locator(mtick.FixedLocator(x_data)) # Set tick locations plt.gca().xaxis.set_major_formatter(mtick.FuncFormatter(lambda x,p:getMonthName(x))) plt.show() 

Сообщение здесь состоит в том, что вы можете использовать matplotlib.ticker.FuncFormatter чтобы использовать любую функцию для получения метки метки. Функция принимает два аргумента (значение и позиция) и возвращает строку.

  • Python_How писать данные в новых столбцах для каждого файла, считанного numpy?
  • Lock free read only Список в Python?
  • Как эффективно удалять столбцы из разреженной матрицы, содержащей только нули?
  • Структура данных для пользовательской индексации
  • numpy einsum, чтобы получить перестановку осей
  • Функция python, которая принимает в качестве аргумента скаляр или массив numpy
  • Печать реальных корней только в numpy
  • GradientBoostingClassifier с BaseEstimator в scikit-learn?
  • Python - лучший язык программирования в мире.