python - 在子图中绘制熊猫数据框
问题描述
我有以下 pandas 数据框,并希望n
在其中 n = unique labels(l1,l2,.) 的位置水平创建图a1 row
(例如,在以下示例中,由于 ,将有两个图l1 and l2
)。然后对于这两个图,每个图都将绘制a4
为 x 轴a3
和 y 轴。例如,ax[0]
将包含 的图表a1
,其中包含三条线,连接[(1,15)(2,20)],[(1,17)(2,19)],[(1,23)(2,15)]
以下数据的点。
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
d = {'a1': ['l1','l1','l1','l1','l1','l1','l2','l2','l2','l2','l2','l2'],
'a2': ['a', 'a', 'b','b','c','c','d','d','e','e','f','f'],
'a3': [15,20,17,19,23,15,22,21,23,23,24,27],
'a4': [1,2,1,2,1,2,1,2,1,2,1,2]}
df=pd.DataFrame(d)
df
a1 a2 a3 a4
1 a 15 1
1 a 20 2
1 b 17 1
1 b 19 2
1 c 23 1
1 c 15 2
2 d 22 1
2 d 21 2
2 e 23 1
2 e 23 2
2 f 24 1
2 f 27 2
我目前有以下内容:
def graph(dataframe):
x = dataframe["a4"]
y = dataframe["a3"]
ax[0].plot(x,y) #how do I plot and set the title for each group in their respective subplot without the use of for-loop?
fig, ax = plt.subplots(1,len(pd.unique(df["a1"])),sharey='row',figsize=(15,2))
df.groupby(["a1"]).apply(graph)
然而,我上面的尝试只在第一个子图上绘制了所有 a3 和 a4(因为我写了ax[0].plot()
)。我总是可以使用 for 循环来完成所需的任务,但是对于 中的大量唯一组a1
,它的计算成本会很高。有没有办法让它成为一条线上的单线ax[0].plot(x,y)
,它可以在没有 for 循环的情况下完成所需的任务?任何输入表示赞赏。
解决方案
在用 pandas 绘制这些数据时,我看不到任何避免 for 循环的方法。我最初的想法是重塑数据框以使其subplots=True
正常工作,如下所示:
dfp = df.pivot(columns='a1').swaplevel(axis=1).sort_index(axis=1)
dfp
但是我看不到如何选择列的第 1 级MultiIndex
来进行类似的dfp.plot(x='a4', y='a3', subplots=True)
工作。
删除级别 0,然后使用
dfp.droplevel(axis=1, level=0).plot(x='a4', y='a3', subplots=True)
raises运行绘图功能ValueError: x must be a label or position
。即使这可行,仍然存在将正确点链接在一起的问题。
seaborn 包的创建是为了方便地绘制这种数据集。如果您愿意使用它,这里有一个示例relplot
:
import pandas as pd # v 1.1.3
import seaborn as sns # v 0.11.0
d = {'a1': ['l1','l1','l1','l1','l1','l1','l2','l2','l2','l2','l2','l2'],
'a2': ['a', 'a', 'b','b','c','c','d','d','e','e','f','f'],
'a3': [15,20,17,19,23,15,22,21,23,23,24,27],
'a4': [1,2,1,2,1,2,1,2,1,2,1,2]}
df = pd.DataFrame(d)
sns.relplot(data=df, x='a4', y='a3', col='a1', hue ='a2', kind='line', height=4)
您可以使用参数自定义颜色palette
并使用 调整网格布局col_wrap
。
推荐阅读
- r - 如何使用 dplyr 获取交叉表(group_by)以包含 0?
- visual-studio-code - 在 VScode 中使用多个光标进行搜索
- python - Python:Kivy 模块不显示小部件
- ios - 移动数据开启时 iOS 无法连接到本地套接字
- image-processing - 使用 ImageMagick 跟踪鼠标路径?
- swift - 如何使用单例对模型控制器进行单元测试
- flutter - 将淡入淡出应用于图像或组件(模糊、渐变)
- coq - 如何一次应用于多个假设?
- excel - VBA/宏问题创建正确高度/宽度的表格并在没有电子表格最后一行的情况下创建该表格
- google-cloud-platform - 在云构建中运行 gcloud 脚本