Даты на оси отображаются как 51 января вместо 20 января

#python #date #matplotlib #subplot #x-axis

#python #Дата #matplotlib #подзаголовок #ось x

Вопрос:

Первый вопрос здесь, поэтому, если что-то неясно, я могу уточнить…

если я закомментирую последние три строки, моя диаграмма выглядит нормально, но даты на оси X не отображаются в нужном мне формате (МММ-ГГ), и если я перейду на приведенное ниже для других вещей, которые я прочитал, я получу 51 января вместо 20 января?

надеюсь на некоторые идеи!

Спасибо,

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

data= [['2020-01-01',70,'bra'],['2020-01-01',80,'mex'],
       ['2020-01-05',40,'bra'],['2020-01-05',50,'mex'],
       ['2020-01-09',30,'bra'],['2020-01-09',20,'mex']]
df=pd.DataFrame(data,columns=['date','value','country'])
df['date']=pd.to_datetime(df['date'],format = '%Y-%m-%d')


#create subplot 
fig = plt.figure(figsize=(12,5))
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)

for key,grp in df.groupby(['country']):
    ax1 = grp.plot(kind='line',x='date', y='value', ax=ax1,label=key
                   ,title='Values')
    ax1.set_axisbelow(True)
    ax1.grid(linestyle='-',linewidth='0.5',color='black')
    ax1.set_ylim([0,100])
    ax1.set_ylabel('values')
    monthyearFmt = mdates.DateFormatter('%b %y')
    ax1.xaxis.set_major_formatter(monthyearFmt) 
    ax1.xaxis.set_major_locator(mdates.DayLocator(interval=60))
 

Комментарии:

1. использование x_compat=True в grp.plot ( pandas.pydata.org/pandas-docs/version/0.15.0 /… )

2. Гениально!! спасибо — ценю помощь

3. Это сработало отлично!

Ответ №1:

Использование x_compat=True :

 #create subplot 
fig = plt.figure(figsize=(12,5))
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)

for key,grp in df.groupby(['country']):
    ax1 = grp.plot(kind='line',x='date', y='value', ax=ax1,label=key
                   ,title='Values', x_compat=True)
    ax1.set_axisbelow(True)
    ax1.grid(linestyle='-',linewidth='0.5',color='black')
    ax1.set_ylim([0,100])
    ax1.set_ylabel('values')
    monthyearFmt = mdates.DateFormatter('%b %d %Y')
    ax1.xaxis.set_major_formatter(monthyearFmt) 
    ax1.xaxis.set_major_locator(mdates.DayLocator(interval=2))
 

Вывод:

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