python - 当我们在 groupby 之后绘制数据框时,为什么 pandas 会为每个组生成一个图形句柄?
问题描述
我有一个看起来像这样的熊猫数据框:
date region Re
2020-02-25 AG 1.36
2020-02-26 AG 1.53
2020-02-27 AG 1.6
2020-02-28 AG 1.88
2020-02-29 AG 2.09
2020-02-25 FR 2.33
2020-02-26 FR 2.54
2020-02-27 FR 2.61
2020-02-28 FR 2.68
2020-02-29 FR 2.69
现在,如果我运行:
import pandas as pd
# Load the data from clipboard
df = pd.read_clipboard()
# Set a new index
df.set_index('date', inplace=True)
# Plot the result grouped by region
h = df.groupby('region')['Re'].plot(rot=90)
我明白了我的情节。但是h
是一个包含两个AxesSubPlot
对象的熊猫系列:
region
AG AxesSubplot(0.125,0.125;0.775x0.755)
FR AxesSubplot(0.125,0.125;0.775x0.755)
Name: Re, dtype: object
因此,例如,如果我想更改ylim
我不能简单地写h.set_ylim((0,3))
. 为什么 pandas 为每个组生成一个图形句柄,它为什么有用?set_ylim
在这种情况下我什至可以使用该方法吗?
为了解决这个问题,我可以直接在函数ylim
中传递一个新参数,比如,但我仍然不明白为什么 pandas为每个组创建一个对象。在这种情况下,文档并没有真正的帮助。ylim
plot()
df.plot(ylim=(0,2))
AxesSubPlot
解决方案
这是绘制熊猫 Groupby 时的正常行为。
我建议你使用 Seaborn,一个非常好的库来绘制分类数据,它会自动执行分类分组。
import seaborn as sns
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
sns.lineplot(data=df, x="date", y="Re", hue="region", ax=ax)
Seaborn 基于 Matplotlib,fig
将ax
是简单的 Matplotlib Figure 和 Axes 对象,您可以随意编辑它们!
推荐阅读
- python - 在python中交换十六进制字节数组中的字节对
- c++ - 如何在 C++ 中将 JWK 公钥转换为 PEM 格式
- r - R中的最大阶乘数
- windows - 从 CMD 返回特定字段
- c - 为什么需要确保在包含使用它的预编译头文件之前不扩展 gcc 的 __COUNTER__ 宏?
- javascript - 年份未定义
- javascript - 如何在 Google Apps 脚本中制作刷新表?
- yaml - 如何通过将 csv 数据存储在变量中来将其访问到 yml 文件中?
- sql - 从 SQL 表中删除过时/不相关的值
- reactjs - 我正在对 api 提出请求,但即将授权失败。如何在获取链接中包含授权令牌