在 geom_histogram 中使用第三个变量作为填充美学

Posted

技术标签:

【中文标题】在 geom_histogram 中使用第三个变量作为填充美学【英文标题】:using a third variable as a fill aesthethic in geom_histogram 【发布时间】:2020-08-19 02:03:10 【问题描述】:

我正在尝试通过使用连续变量填充条形来为直方图添加额外的维度。但是,以下语法给了我灰色条:


ggplot(mtcars, aes(x = mpg, fill = hp)) + 
  geom_histogram(aes(y = (..count..)/sum(..count..)), binwidth = 2) +
  scale_y_continuous(label = function(x) paste0(round(x *100), "%")) +
  labs(x = "miles per gallon",
       y = "percentage of cars",
       fill = "horsepower") +
  theme(legend.position = c(.8, .8)) +
  scale_fill_continuous()

使用带有因子转换变量的离散尺度有效:

ggplot(mtcars, aes(x = mpg, fill = factor(hp))) + 
  geom_histogram(aes(y = (..count..)/sum(..count..)), binwidth = 2) +
  scale_y_continuous(label = function(x) paste0(round(x *100), "%")) +
  labs(x = "miles per gallon",
       y = "percentage of cars",
       fill = "horsepower") +
  theme(legend.position = c(.8, .8)) +
  scale_fill_discrete()

我们可以清楚地看到这增加了信息。也就是说,HP 似乎与 MPG 成反比。

这正是我想要实现的目标。

谁能解释这种行为以及如何避免它?

【问题讨论】:

【参考方案1】:

我对这个问题并不完全清楚,但该图看起来确实如此,因为当 HP 实际上是一个数字变量时,您将其视为一个因素。

通常直方图用于显示有关单个变量而不是两个变量的信息。在这种情况下,您对两个变量之间的关系感兴趣,因此另一个图可能更合适。您是否有不想使用散点图来显示这种关系的原因?散点图通常更适合比较两个数值变量。

我认为这更清楚地表明了同一件事(即 HP 和 MPG 呈负相关)。

ggplot(mtcars, aes(x = mpg, y = hp)) +
  geom_point()

【讨论】:

以上是关于在 geom_histogram 中使用第三个变量作为填充美学的主要内容,如果未能解决你的问题,请参考以下文章

geom_histogram 移动直方图

在直方图上叠加数据的一致方式(从 geom_histogram 中提取分箱数据?)

使用 scale_x_log10 时如何在 geom_histogram 中设置 ggplot2 binwidth?

Golang中交换两个变量的值,但是不允许使用第三个变量?

没有第三个变量如何交换?

如何使用第三个变量按颜色分隔数据的散点图? [复制]