ggplot aes:alpha 得到 "smoothed out"
ggplot aes: alpha gets "smoothed out"
我在 ggplot2
R 包中使用 ggplot
,数据集为 mpg
。
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
只能取两个值:当 class 为 suv
或 pickup
时为 1,否则为 0。但是我在结果图中得到了一个奇怪的 "smooth" 大小范围:
(让我吃惊的不是传说,而是事实上有一些值是用 alpha 0.1 或 0.3 或其他什么绘制的。)
怎么回事?
(It's not the legend that surprises me, but the fact that there are actually values plotted with alpha 0.1 or 0.3 or whatever.)
没有。您看到的是多个点具有完全相同的离散坐标,因此半透明点重叠。
并修复图例,使用因子或字符串(=离散)而不是数字(=连续)。
无关,但您的 classify
实现是非常不正统的代码。首先,由于R是一种函数式语言,所以所有的表达式都是values。这意味着,与其在 if
中执行赋值,您通常会分配 if
:
的结果
result = if (cls == "suv" || cls == "pickup") 1 else 0
此外,不需要 result
变量,也不需要 return
函数调用(在 R 中执行提前退出)。相反,惯用的 R 实现如下所示:
classify = function(cls) {
if (cls == "suv" || cls == "pickup") 1 else 0
}
更好的是,使用矢量化 ifelse
而不是非矢量化 if
:
classify = function(cls) {
ifelse(cls == "suv" | cls == "pickup", 1, 0)
}
现在您可以在没有 sapply
的情况下使用 classify
:
mpg = mpg %>% mutate(size = classify(class))
我在 ggplot2
R 包中使用 ggplot
,数据集为 mpg
。
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
只能取两个值:当 class 为 suv
或 pickup
时为 1,否则为 0。但是我在结果图中得到了一个奇怪的 "smooth" 大小范围:
(让我吃惊的不是传说,而是事实上有一些值是用 alpha 0.1 或 0.3 或其他什么绘制的。)
怎么回事?
(It's not the legend that surprises me, but the fact that there are actually values plotted with alpha 0.1 or 0.3 or whatever.)
没有。您看到的是多个点具有完全相同的离散坐标,因此半透明点重叠。
并修复图例,使用因子或字符串(=离散)而不是数字(=连续)。
无关,但您的 classify
实现是非常不正统的代码。首先,由于R是一种函数式语言,所以所有的表达式都是values。这意味着,与其在 if
中执行赋值,您通常会分配 if
:
result = if (cls == "suv" || cls == "pickup") 1 else 0
此外,不需要 result
变量,也不需要 return
函数调用(在 R 中执行提前退出)。相反,惯用的 R 实现如下所示:
classify = function(cls) {
if (cls == "suv" || cls == "pickup") 1 else 0
}
更好的是,使用矢量化 ifelse
而不是非矢量化 if
:
classify = function(cls) {
ifelse(cls == "suv" | cls == "pickup", 1, 0)
}
现在您可以在没有 sapply
的情况下使用 classify
:
mpg = mpg %>% mutate(size = classify(class))