pyplot, почему не отображается ось X? - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь построить некоторые значения в зависимости от даты.Однако, к сожалению, я не получаю никаких значений по оси X.Я чувствую, что это может быть связано с двумя факторами:

  1. Значения хранятся как «даты», что усложняет процедуру
  2. Поскольку дата будет занимать слишком много места наось х становится слишком загроможденной, и поэтому я вижу только черную линию.

Пожалуйста, дайте мне знать, как я могу улучшить это, чтобы я мог получить основные тики, которые правильно распределены.

Мой текущий код:

fig1 = plt.plot(Sleep['dateOfSleep'], Sleep['TotalDeepSleep'])
plt.show()
plt.clf

вывод, который я получаю:

Output

1 Ответ

1 голос
/ 27 июня 2019

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

def format_xaxis(fig):
     # here I am setting the major ticks to each decade
     # Change to something appropriate for your data
     major= dates.MonthLocator(bymonthday=1)

     #Here I am setting each minor ticks to mid-decade 
     # Change to something appropriate for your data    
     minor=dates.MonthLocator(bymonthday=15)

     #Here I am setting each major ticks and minor tick formatting
     # Change to something appropriate for your data 
     #look at http://strftime.org/ for other options
     majorfmt = dates.DateFormatter('%B')
     minorfmt = dates.DateFormatter('%d')

     # Set the locators and formats for all of the subplots axes
     [i.xaxis.set_major_locator(major) for i in fig.axes]
     [i.xaxis.set_minor_locator(minor) for i in fig.axes]
     [i.xaxis.set_major_formatter(majorfmt) for i in fig.axes]
     [i.xaxis.set_minor_formatter(minorfmt) for i in fig.axes]

     # Here I am offsetting the major ticks down so they dont overlap with minor tick lables
     [i.get_xaxis().set_tick_params(which='major', pad=15) for i in fig.axes]

     #make them look nice
     for t in fig.axes:
         for tick in t.xaxis.get_major_ticks():
             tick.label1.set_horizontalalignment('center')
         for label in t.get_xmajorticklabels() :
             label.set_rotation(0)
             label.set_weight('bold')
         for label in t.xaxis.get_minorticklabels():
             label.set_fontsize('small')   

Вы можете заменить dates.MonthLocator на любой локатор, подходящий для ваших данных.Просто посмотрите на предоставленную мной ссылку.

Небольшой пример:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as dates
import numpy as np

df = pd.DataFrame({'Date':pd.date_range(start = '2015-01-01', end = '2015-05-01'), 'TotalDeepSleep':np.random.randint(0,140,size=121)})


fig,ax = plt.subplots()
ax.plot_date(df['Date'], df['TotalDeepSleep'])

format_xaxis(fig)

enter image description here

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