Не удается увидеть график, несмотря на использование функции .show()

#python #pandas #matplotlib

Вопрос:

У меня есть фрейм данных pandas с несколькими столбцами и тысячами строк.

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

                        NO          NO2       NOx    CO           Ozone
From Date                   
2018-12-30 00:00:00 5.856666    39.208341   28.97   331.280881  19.778900
2018-12-30 01:00:00 4.050059    16.262145   13.53   454.031703  25.075286
2018-12-30 02:00:00 4.057806    15.293990   12.96   466.502681  24.825294
2018-12-30 03:00:00 3.835476    13.526193   11.71   446.526784  25.033312
2018-12-30 04:00:00 4.230690    11.251531   10.70   355.638469  25.748796

 
 import pandas as pd
import matplotlib
from matplotlib import dates as d
import datetime as dt
import matplotlib.pyplot as plt
import numpy as np
 
 dataframe['Month'] = dataframe.index.map(lambda x: x.strftime("%m"))
dataframe['Time'] = dataframe.index.map(lambda x: x.strftime("%H:%M"))
for month in dataframe['Month'].unique():
    df = dataframe.loc[dataframe['Month'] == month]

    df = df.groupby('Time').describe()

    ax.plot(df.index, df['Ozone']['mean'], linewidth=2.0, label = month)
    
ax.legend()
ticks = ax.get_xticks()
ax.set_xticks(np.linspace(ticks[0], d.date2num(d.num2date(ticks[-1])   dt.timedelta(hours=3)), 5))
ax.set_xticks(np.linspace(ticks[0], d.date2num(d.num2date(ticks[-1])   dt.timedelta(hours=3)), 25), minor=True)
plt.show()

 

Я не вижу никакого графика, несмотря на успешную компиляцию и выполнение кода, в чем может быть проблема?

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

1. Как 'Month' 'Time' были созданы столбцы и? Если вы не дадите нам код, который мы сможем запустить, то мало кто сможет вам помочь.

2. Извинения. Я исправил код

Ответ №1:

В следующий раз, когда вы поставите нетривиальный фрейм данных на вопрос, предоставьте код для его создания на python, больше людей, скорее всего, помогут вам решить вашу проблему вместо того, чтобы воссоздавать ваши данные. Кроме того, не весь импорт был необходим для этого фрагмента.

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

dataframe = pd.DataFrame( 
    columns = ['From Date',   'NO',          'NO2',       'NOx',    'CO',           'Ozone'],           
    data = [
        ['2018-12-30 00:00:00', 5.856666,    39.208341,   28.97,   331.280881,  19.778900],
        ['2018-12-30 01:00:00', 4.050059,    16.262145,   13.53,   454.031703,  25.075286],
        ['2018-12-30 02:00:00', 4.057806,    15.293990,   12.96,   466.502681,  24.825294],
        ['2018-12-30 03:00:00', 3.835476,    13.526193,   11.71,   446.526784,  25.033312],
        ['2018-12-30 04:00:00', 4.230690,    11.251531,   10.70,   355.638469,  25.748796]
    ]
)
dataframe['From Date'] = pd.to_datetime(dataframe['From Date'])
dataframe = dataframe.set_index('From Date')
 

После выполнения следующего кода (отсутствующий ax объект) я получил следующий график.

 dataframe['Month'] = dataframe.index.map(lambda x: x.strftime("%m"))
dataframe['Time'] = dataframe.index.map(lambda x: x.strftime("%H:%M"))
#I've added this line too
fig, ax = plt.subplots(1)
for month in dataframe['Month'].unique():
    df = dataframe.loc[dataframe['Month'] == month]
    df = df.groupby('Time').describe()
    ax.plot(df.index, df['Ozone']['mean'], linewidth=2.0, label = month)
    
ax.legend()
ticks = ax.get_xticks()
ax.set_xticks(np.linspace(ticks[0], d.date2num(d.num2date(ticks[-1])   dt.timedelta(hours=3)), 5))
ax.set_xticks(np.linspace(ticks[0], d.date2num(d.num2date(ticks[-1])   dt.timedelta(hours=3)), 25), minor=True)
plt.show()
 

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

Это моя версия matplotlib:

 import matplotlib
matplotlib.__version__
'3.4.1'
 

Если этот код не работает для вас, попробуйте обновить matplotlib до более новой версии и опубликуйте результаты, если он все еще не работает.

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

1. Эй, так это сработало для меня. Спасибо! и приносим извинения за причиненные неудобства. Я просто хотел спросить, какую команду я мог бы использовать, если у меня несколько месяцев, например, здесь 12 декабря, так как я могу построить график отдельно для разных месяцев? Можно ли это сделать, изменив какой-либо оператор в цикле for?

2. График, который я получаю, довольно запутан и сложен для понимания, следовательно, есть ли какой-либо способ разделить различные линии графика на разные участки?

3. Это еще один вопрос, не могли бы вы задать другой вопрос или провести исследование по использованию plt с несколькими строками.