Python 在plotnine中使用“缩放大小手册”时出现的问题

Python 在plotnine中使用“缩放大小手册”时出现的问题,python,categorical-data,plotnine,Python,Categorical Data,Plotnine,我正在尝试使用plotnine构建一个基于a分类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',

我正在尝试使用plotnine构建一个基于a分类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))
但是,当我运行代码时,会收到以下消息:

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

考虑到问题在于
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))
但是,这会给出错误消息:

ValueError:无法将浮点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略有不同


如何让plotnine执行我想要的操作?

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

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

... + scale_size_manual(values=(3,3,3,3), na_value=-1)
谢谢A刚上来解决这个问题。这可能会出现在plotnine的下一个版本中。