![](/img/trans.png)
[英]Plot line graph with matplotlib python for a 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.