如何根据 python 中的条件添加 geom_point 层

How to add a geom_point layer based on a condition in python

我正在使用基于 R 的 ggplot 的 python 包 plotnine 并且我正在尝试创建一个要绘制线条的图,然后,我想添加一个 geom_point 图层,如果给定的标准得到验证,该图层仅绘制一些点。

所以我有一个数据框,其中包含一个包含实数的变量(即我想绘制成一条线的那个),然后是一个二进制变量。如果第二个变量的值为 1,我想用第一个变量的值绘制点,如果第二个变量的值为 0,我想绘制点。

我提供一个小数据框作为例子

import pandas as pd
from plotnine import ggplot, aes, geom_line, geom_point
d = dict(
    a = np.arange(10),
    b = [0, 0, 0, 1, 0, 0, 1, 0, 1, 0]
)
d = pd.DataFrame(d)

(ggplot(df, aes(x='a')) + 
 geom_line(aes(y='a'), color='black')
 # Some code to plot points with value a[i] if b[i]==1
 )

我能想到的唯一方法是创建一个辅助数据框,如果 b=1 则值为 a,如果 b=0 则值为 None,但这感觉有点笨拙

您必须在点图层中使用包含所需数据的数据框。

(ggplot(df, aes(x='a'))
 + geom_line(aes(y='a'), color='black')
 + geom_point(df[df['b'] == 1], aes(y='a')) # or geom_point(df.query('b == 1'), aes(y='a'))
 )