gpt4 book ai didi

python - 在plotnine中使用 `scale_size_manual`时出现问题

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:23 24 4
gpt4 key购买 nike

我正在尝试使用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: Continuous value supplied to discrete scale

认为问题在于 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: cannot convert float NaN to integer

在 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))

给出熟悉的消息

Error: Continuous value supplied to discrete scale

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

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做我想做的事?

最佳答案

这个问题最近在 github 上得到了回答事实证明这是一个源自plotnine 与numpy 接口(interface)方式的错误。

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

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

关于python - 在plotnine中使用 `scale_size_manual`时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48290566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com