首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gets :阿尔法得到“平滑”

gets :阿尔法得到“平滑”
EN

Stack Overflow用户
提问于 2019-10-23 13:43:29
回答 1查看 34关注 0票数 1

我在ggplot2 R包中使用mpg数据集。

代码语言:javascript
复制
classify = function(cls){
    if (cls == "suv" || cls == "pickup"){result = 1}
    else {result = 0}
    return(result)
}
mpg = mpg %>% mutate(size = sapply(class, classify))

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, alpha = size))

现在,size只能接受两个值:1类为suvpickup时,否则为0。但在结果的情节中,我得到了一个奇怪的“平滑”大小范围:

(让我惊讶的并不是传说,而是使用alpha 0.1或0.3或其他任何东西绘制的值。)

到底怎么回事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-23 13:47:14

(这并不是令我惊讶的传说,而是使用alpha 0.1或0.3或其他任何东西绘制的值。)

没有,你看到的是多个点有完全相同的离散坐标,所以半透明点重叠。

要修复图例,请使用因子或字符串(=离散)代替数字(=连续)。

不相关,但您的classify实现是非常非传统的代码。首先,由于R是一种函数式语言,所以所有表达式都是值。这意味着,与其在if中执行赋值,不如通常分配if的结果

代码语言:javascript
复制
result = if (cls == "suv" || cls == "pickup") 1 else 0

此外,不需要result变量,也不需要return函数调用(在R中执行早期退出)。相反,一个惯用的R实现看起来如下:

代码语言:javascript
复制
classify = function(cls) {
    if (cls == "suv" || cls == "pickup") 1 else 0
}

更好的方法是使用矢量化的ifelse而不是非矢量的if

代码语言:javascript
复制
classify = function(cls) {
    ifelse(cls == "suv" | cls == "pickup", 1, 0)
}

现在您可以不用classify使用sapply了。

代码语言:javascript
复制
mpg = mpg %>% mutate(size = classify(class))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58524281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档