我观察到一种奇怪的行为。 映射
cyl
变量(来自 mtcars 数据)正在生成具有 5 个不同级别 alpha
的图表,尽管事实上只有三个级别可用?
这是一个错误吗? 或者我错过了什么?
library(tidyverse)
count(mtcars, cyl)
#> cyl n
#> 1 4 11
#> 2 6 7
#> 3 8 14
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point(aes(alpha = cyl), size = 4)
创建于 2024-08-24,使用 reprex v2.1.1
原因是
cyl
是一个连续变量,默认情况下,连续刻度的中断数量是使用 scales::breaks_extended
设置的(不能 100% 确定这适用于所有情况,尽管 (: ) 默认情况下也会返回约 n=5
中断。
library(ggplot2)
scales::breaks_extended()(mtcars$cyl)
#> [1] 4 5 6 7 8
解决这个问题的简单方法是将其转换为
factor
:
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point(aes(alpha = factor(cyl)), size = 4)
#> Warning: Using alpha for a discrete variable is not advised.
或者通过比例明确设置中断:
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point(aes(alpha = cyl), size = 4) +
scale_alpha_continuous(breaks = sort(unique(mtcars$cyl)))