ggplot2:比例与坐标变换
ggplot2: Scale versus Coord transform
我理解 scale
和 coord
变换之间的区别 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()
我理解 scale
和 coord
变换之间的区别 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()