我正在尝试使用 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:无法将浮点 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 做我想做的事?