#python #pandas #dataframe #matplotlib #seaborn
#python #pandas #фрейм данных #matplotlib #seaborn
Вопрос:
Проблема в том, что я пытаюсь сгенерировать линейный график с помощью функции seaborn.lineplot(), но, похоже, я не могу найти способ сгенерировать линейный график, подобный приведенному ниже:
https://i.stack.imgur.com/zUKog.png
В моем наборе данных есть следующие столбцы: год, месяц, день, единицы измерения, цена за единицу, продажи. Я использовал функцию groupby от pandas для суммирования продаж за каждый год в каждом месяце.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
years_list = [date.strftime('%Y/%#-m/%#-d') for date in pd.date_range('01/01/2000', '31/12/2019')]
data = {
'year': [int(date.split('/')[0]) for date in years_list],
'month': [int(date.split('/')[1]) for date in years_list],
'day': [int(date.split('/')[2]) for date in years_list],
'units': [np.random.randint(1,25) for turns in range(len(years_list))],
'price_per_unit': [np.random.uniform(10, 100) for turns in range(len(years_list))]
}
df = pd.DataFrame(data)
df['sales'] = df['price_per_unit'] * df['units']
each_month = df.groupby(['year', 'month'])['sales'].sum().reset_index()
Изначально я думал, что использование кода sns.lineplot(x='month', y='sales', hue='year', data=each_month)
автоматически сгенерирует желаемый график, но вместо этого он сгенерировал запутанный график.
У кого-нибудь есть решение для меня? даже если это не с помощью seaborn, а matplotlib.
Ответ №1:
Да, эта строка действительно создает то, что вы хотите. Однако для числового оттенка sns
автоматически окрашивает вашу линию в соответствии с непрерывной цветовой картой. Чтобы преодолеть это, вы можете преобразовать свой year
тип в string:
each_month['year'] = 'Y' each_month['year'].astype(str)
plt.figure(figsize=(10,6))
sns.lineplot(x='month', y='sales', hue='year', data=each_month)
Вывод: