как сделать несколько сюжетов на одном рисунке?

#python #matplotlib #subplot

Вопрос:

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

 import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
data=pd.read_csv 
('https://raw.githubusercontent.com/soulJ90/RPythonClass/main/credit.txt', 
sep=" ")
grouped=data.groupby('type')
data[data.amount.isnull()]
na_indexs=data[data.amount.isnull()].index
fill_value=data.groupby("type").amount.median()
result = pd.DataFrame()
for name, group in data.groupby('type'):
     c = group.fillna(group.median())
result = pd.concat([result,c])
fig, ax= plt.subplots()
for name, group in result:
    ax.plot(group.date,group.amount,label=name)
plt.figure(figsize=(14,6))
ax.legend(loc='upper right',ncol=2, fontsize=11)
plt.xlabel("date")
plt.ylabel("the number of transactions")
plt.title("the number of credic card transactions", fontsize=15)
plt.show()
 

Мне нужно сделать рисунок, как показано ниже. Но в настоящее время это не работает. Не могли бы вы, пожалуйста, помочь мне?введите описание изображения здесь

Ответ №1:

Попробуй:

 import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
data=pd.read_csv('https://raw.githubusercontent.com/soulJ90/RPythonClass/main/credit.txt', sep=" ")
ax = data.groupby(['date', 'type'])['amount'].count().unstack().plot(figsize=(12,8))
ax.legend(loc='upper right')
ax.set_ylabel('Number of Transactions')
 

Выход:

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

Подробные сведения:

Используйте groupby для создания как оси x, так и оси y, затем распакуйте это многоиндексное выражение, чтобы создать столбцы в вашем фрейме данных, представляющие серию («тип»). Используйте панд.Фрейм данных.график для создания графики с несколькими строками (рядами) на основе столбцов в фрейме данных.