Отображать месяцы, а не дни на оси X графика - PullRequest
0 голосов
/ 06 мая 2019

enter image description here

У меня есть 2 графика, которые имеют одинаковую ось X и нанесены на одну фигуру (то есть одну ось X и две оси y).Проблема в том, что временные рамки, показанные на общей оси X, слишком подробны и отображают дни, а не месяцы (что я бы предпочел).

[fig1, ax1 = plt.subplots()

color = 'tab:red'
ax1.set_xlabel('Months')
ax1.set_ylabel('Price', color=color)
ax1.plot(df\['2019'\]\['Price'\], color=color)
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()  # instantiate a second axes that shares the same x-axis

color = 'tab:blue'
ax2.set_ylabel('RSI', color=color)  # we already handled the x-label with ax1
ax2.plot(RSI(df\['2019'\]\['Price'\]), color=color)
ax2.tick_params(axis='y', labelcolor=color)

fig.tight_layout()  
plt.show()][1]

Ожидается, что на оси X будут отображаться месяцы, а не даты

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Вы можете просто использовать функцию DateFormatter и применить ее к данным оси X. Я создал решение, используя некоторые примеры данных, заменив RSI информацией «Sales».

import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.dates as mdates

#Sample Data
data = [['2019-03-20',10, 1000],['2019-04-04',22,543],['2019-11-17',13,677]]
df = pd.DataFrame(data,columns=['Date','Price','Sales'])

# DateFormatter object to use abbreviated version of month names
monthsFmt = mdates.DateFormatter('%b')

fig1, ax1 = plt.subplots()

color = 'tab:red'
ax1.set_xlabel('Months')
ax1.set_ylabel('Price', color=color)
ax1.plot(pd.to_datetime(df['Date'], infer_datetime_format=True), df['Price'], color=color)
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()  # instantiate a second axes that shares the same x-axis

color = 'tab:blue'
ax2.set_ylabel('Sales', color=color)  # we already handled the x-label with ax1
ax2.plot(pd.to_datetime(df['Date'], infer_datetime_format=True), df['Sales'], color=color)
ax2.tick_params(axis='y', labelcolor=color)

# Apply X-axis formatting at the end
ax2.xaxis.set_major_formatter(monthsFmt)

fig1.tight_layout()
plt.show()

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

Result Image

0 голосов
/ 06 мая 2019

Вы можете использовать метод xticks, чтобы установить расположение и метки тиков на вашем графике. Как пример:

plt.xticks( [1,2,3,4,5,6,7,8,9,10,11,12], ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

Обратите внимание, что первый список - это местоположений галочек на оси, а второй - метки. Из прикрепленного изображения невозможно понять тип или область действия вашей оси X, но я надеюсь, что решение есть.

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