簡體   English   中英

日期時間堆積條形圖,帶有來自 dataframe 的 Matplotlib

[英]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 使其成為堆疊條形圖。

研究:

  1. 使用 pandas 和 Matplotlib 自定義日期時間索引的分組條形圖
  2. 疊條 plot 使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM