[英]Datetime Stacked Bar Chart with Matplotlib from dataframe
背景:
我被困住了。 或者只是有一個金發的時刻。 我就像一只看着車頭燈的鹿。
我從 MySQL 表中查詢了以下 dataframe 。
date operation
2020-05-07 A
2020-05-08 B
2020-05-08 A
2020-05-12 A
2020-05-12 A
2020-05-12 B
2020-05-13 C
2020-05-13 A
2020-05-13 B
2020-05-14 A
2020-05-19 B
2020-05-21 A
2020-05-25 A
2020-05-26 B
2020-05-26 C
2020-05-26 A
2020-05-26 A
2020-05-29 A
我不知道如何使用 matplotlib 使其成為堆疊條形圖。
研究:
問題:
如何使用上述示例數據生成帶有 matplot lib 的堆棧條形圖?
代碼片段:
import datetime as dt
import mysql.connector
import os
import pandas as pd
# import numpy as np
import matplotlib.pyplot as plt
import datetime
def generate_monthly_graph():
query = "SELECT [...]`"
mycursor.execute(query)
mycursor.execute(query)
data = mycursor.fetchall()
df = pd.DataFrame(data, columns=['date', 'operation'])
df = df.set_index('date')
df.index = pd.to_datetime(df.index)
您可以使用crosstab
然后plot.bar
:
# convert to date, no need for set_index
df.date = pd.to_datetime(df.date)
pd.crosstab(df.date,df.operation).plot.bar(stacked=True)
Output:
如果你想要每月,你可以使用dt.to_period('M')
來獲取每月的日期和crosstab
:
pd.crosstab(df.date.dt.to_period('M'),df.operation).plot.bar(stacked=True)
Output(用於示例數據):
更新以在 x 軸上顯示所有日期:
df['date'] = pd.to_datetime(df.date)
mindate, maxdate = df['date'].agg(['min','max'])
all_dates = pd.date_range(mindate, maxdate, freq='D').date
(pd.crosstab(df.date,df.operation)
.reindex(all_dates)
.plot.bar(stacked=True)
)
Output:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.