在情节

时间:2018-01-16 22:04:27

标签: python categorical-data plotnine

我试图使用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))

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

  

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:无法将float NaN转换为整数

在R&#39的ggplot中(情节试图镜像),以下

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略有不同。

我如何让情节去做我想做的事?

1 个答案:

答案 0 :(得分:1)

最近在github回答了这个问题,结果发现这是一个错误源于情节如何与numpy接口。

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

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