【发布时间】:2020-06-04 01:20:15
【问题描述】:
我有一个 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))
我检查了 documentation 的 matplotlib plot()。唯一似乎与我要完成的事情远程相关的参数是markevery(),但它产生了错误“位置参数遵循关键字参数”,所以它看起来不正确。我能够成功使用其他几个参数,比如将线条虚线等。
这是数据框
这是 matplotlib 生成的结果图
这是在 Excel 中绘制的相同数据。我正在尝试使用 matplotlib 制作类似的情节
解决方案
- 将
pivot(...,fill_value="0")更改为pivot(...,fill_value=0),所有类别都如上图所示出现在图中。在原始图中,显示的四个类别是 22 个类别中唯一没有任何年份值为 0 的类别。这就是它们被显示的原因。 matplotlib 忽略任何具有“0”值的类别。 - 更简单、更好的解决方案是
pd.crosstab(df['year'],df['category']),而不是我上面的第 5 行。
【问题讨论】:
标签: python pandas matplotlib