我有一个Excel文件,其中包含多行对象和至少两列变量:一个代表年份,一个代表类别。类别变量中有22种类型。
到目前为止,我可以将Excel文件读入DataFrame并应用透视表来显示每年每个类别的计数。我还可以按类别绘制这些年度计数。但是,当我这样做时,22个类别中只有4个被绘制出来。我如何指示Matplotlib显示22个类别中每个类别的绘图线和标签?
这是我的代码
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 documentation中的plot()
。唯一一个看起来与我要完成的任务有一点关系的参数是markevery()
,但它产生了错误“positional argument follow keyword argument”,所以它看起来不正确。我能够成功地使用其他几个参数,比如虚线等。
这是 Dataframe
以下是matplotlib生成的结果图
这里是Excel中绘制的相同数据。我尝试使用matplotlib绘制一个类似的图
溶液
- 将
pivot(...,fill_value="0")
更改为pivot(...,fill_value=0)
,所有类别都将按上面的代码显示在图中。在原始图中,显示的四个类别是22个类别中唯一没有任何年份的0值的类别。这就是显示它们的原因。matplotlib将忽略任何具有“0”值的类别。 - 一个更简单、更好的解决方案是
pd.crosstab(df['year'],df['category'])
,而不是我上面的第5行。
1条答案
按热度按时间r3i60tvu1#
这个问题来自透视表,很可能你不需要它,因为你只是把年份和类别制表。y-m-d列一点用都没有。
请尝试以下操作:
看看您的代码,错误来自:
您正在用字符串“0”填充,这会将列更改为其他内容,并且会被matplotlib忽略。它应该是
fill_value=0
,并且可以工作,尽管方法非常复杂......