#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
с несколькими строками.