在 plotnine 中使用"scale_size_manual"的问题



我正在尝试使用 plotnine 来构建一个图,其中包含根据分类 1-4 调整点大小的点。

在下面的 MWE 中,我构建了一个与我的测试数据集相匹配的测试数据集。

from plotnine import *
import pandas as pd
import numpy as np
a = pd.DataFrame(data={'a':4*list(range(4)), 'x':np.random.random(16), 'y':np.random.random(16)})
ggplot(a, aes(x='x', y='y', size='a')) + geom_point() + scale_size_manual(values=(3,3,3,3))

但是,当我运行代码时,我收到以下消息:

类型错误:提供给离散刻度的连续值

认为问题是a列是非分类的,我尝试了以下 MWE:

from plotnine import *
import pandas as pd
import numpy as np
a = pd.DataFrame(data={'a':4*list(range(4)), 'x':np.random.random(16), 'y':np.random.random(16)})
a['a'] = a['a'].astype('category')
ggplot(a, aes(x='x', y='y', size='a')) + geom_point() + scale_size_manual(values=(3,3,3,3))

但是,这会产生错误消息:

值错误:无法将浮点数 NaN 转换为整数

在R的ggplot(plotnine试图镜像)中,以下内容

library(ggplot2)
a = data.frame(a=rep(1:4,4), x=runif(16), y=runif(16))
ggplot(a, aes(x=x, y=y, size=a)) + geom_point() + scale_size_manual(values=c(3,3,3,3))

给出熟悉的信息

错误:提供给离散刻度的连续值

引入一个因素可以解决问题:

library(ggplot2)
a   = data.frame(a=rep(1:4,4), x=runif(16), y=runif(16))
a$a = factor(a$a)
ggplot(a, aes(x=x, y=y, size=a)) + geom_point() + scale_size_manual(values=c(3,3,3,3))

因此,plotnine对待分类信息的方式似乎与ggplot略有不同。

我怎样才能让剧情做我想做的事?

这个问题最近在 github 上得到了回答,结果证明是一个源于 plotnine 如何与 numpy 接口的错误。

您可以通过以下方式避免此问题:

... + scale_size_manual(values=(3,3,3,3), na_value=-1)

相关内容

  • 没有找到相关文章

最新更新