为什么数据中不存在的水平在ggplot2中用alpha映射?

问题描述 投票:0回答:1

我观察到一种奇怪的行为。 映射

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

r ggplot2 tidyverse alpha aesthetics
1个回答
4
投票

原因是

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

© www.soinside.com 2019 - 2024. All rights reserved.