ggplot2:比例与坐标变换

ggplot2: Scale versus Coord transform

我理解 scalecoord 变换之间的区别 ggplot2 是缩放变换是在 之前完成 计算统计数据和坐标变换 计算统计数据之后完成。但是,我无法通过实际示例来理解这一点。

套餐

library(ggplot2)
library(gapminder)

创建基地地块

base <- ggplot(data = gapminder,
               mapping = aes(x = year,
                             y = gdpPercap * pop,
                             color = continent)) +
  geom_line(stat = "summary")

缩放变换

base +
  scale_y_continuous(trans = "log10")

坐标变换

base +
  coord_trans(y = "log10")

coord_trans() 导致数据描述正确,但我不明白为什么。

注意:我看过,但没有完全帮助

这是一个更简单的示例,应该有助于解释差异。假设我们在一个数据框中有两个值,1 和 10。它们的平均值是 11 / 2 = 5.5.

my_data = data.frame(y = c(1, 10))
mean(my_data$y)
#[1] 5.5

如果我们取它们的对数(以 10 为底),我们得到 0 和 1。对数的平均值为 (0+1)/2 = 0.5。如果我们将其转换回原始比例,我们将得到 10^0.5 = 3.162。所以我们可以看到日志的均值的十与均值不同;日志“压缩”了较大的值,因此它们对平均值的影响较小。

log10(my_data$y)
#[1] 0 1
mean(log10(my_data$y))
#[1] 0.5
10^mean(log10(my_data$y))
#[1] 3.162278

如果我们绘制这个,我们会看到同样的事情。使用坐标变换将控制视口和数据点的空间位置(例如,由于对数比例,请注意 5.00 到 5.25 之间的像素垂直高度略大于 5.75 到 6.00 之间的距离),但它不改变数据点——我们仍然得到平均值 5.5:

ggplot(my_data, aes(y = y, x = 1)) +
  geom_point(stat = "summary", fun = "mean") +
  coord_trans(y = "log10")

但是如果我们切换到scale_y_log10,转换应用在均值计算的上游,所以我们得到的值是对数均值的十,这与我们看到的算法不一样均值。

ggplot(my_data, aes(y = y, x = 1)) +
  geom_point(stat = "summary", fun = "mean") +
  scale_y_log10()