簡體   English   中英

How to show more categories in a Matplotlib line plot of a Pandas DataFrame Pivot Table?

[英]How to show more categories in a Matplotlib line plot of a Pandas DataFrame Pivot Table?

我有一個 Excel 文件,其中包含具有至少兩列變量的對象行:一列用於年份,另一列用於類別。 類別變量中有 22 種類型。

到目前為止,我可以將 Excel 文件讀入 DataFrame 並應用 pivot 表來顯示每年每個類別的計數。 我也可以 plot 這些年度按類別計數。 但是,當我這樣做時,僅繪制了 22 個類別中的 4 個。 如何指示 Matplotlib 顯示 22 個類別中的每一個的 plot 行和標簽?

這是我的代碼

import numpy as np
import pandas as pd
import matplotlib as plt
df = pd.read_excel("table_merged.xlsx", sheet_name="records", encoding="utf8")
df.pivot_table(index="year", columns="category", values="y_m_d", aggfunc=np.count_nonzero, fill_value="0").plot(figsize=(10,10))

我檢查了 matplotlib 文檔中的plot() 唯一似乎與我要完成的事情遠程相關的參數是markevery()但它產生了錯誤“位置參數遵循關鍵字參數”,所以它看起來不正確。 我能夠成功使用其他幾個 arguments ,比如使線條虛線等。

這是 dataframe

在此處輸入圖像描述

這是由 matplotlib 生成的結果 plot

在此處輸入圖像描述

這是在 Excel 中繪制的相同數據。 我正在嘗試使用 matplotlib 制作類似的 plot

在此處輸入圖像描述

解決方案

  • pivot(...,fill_value="0")更改為pivot(...,fill_value=0)並且所有類別都如上圖所示出現在圖中。 在原始圖中,顯示的四個類別是 22 個類別中唯一沒有任何年份值為 0 的類別。 這就是它們被展示的原因。 matplotlib 忽略任何具有“0”值的類別。
  • 一個更簡單、更好的解決方案是pd.crosstab(df['year'],df['category'])而不是我上面的第 5 行。

pivot 出現了問題,很可能您不需要它,因為您只是在列出年份和類別。 ymd 列根本沒有用。

試試下面的方法:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'year':np.random.randint(2008,2020,1000),
                   'category':np.random.choice(np.arange(10),size=1000,p=np.arange(10)/sum(np.arange(10))),
                   'y_m_d':np.random.choice(['a','b','c'],1000)})

pd.crosstab(df['year'],df['category']).plot()

在此處輸入圖像描述

查看您擁有的代碼,錯誤來自:

pivot(...,fill_value="0")

您正在填充字符串“0”,這會將列更改為其他內容,並將被 matplotlib 忽略。 它應該是fill_value=0並且它會起作用,雖然這是一個非常復雜的方法......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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