scale_y_log10() 和 coord_trans(ytrans = 'log10') 导致不同的结果

Mar*_*ria 6 r ggplot2

我正在使用对数变换进行统计分析(反应时间),现在我想用对数变换的 y 轴绘制数据。当我使用 coord_trans(ytrans = "log10") 时,它给出了正确的结果 - 但我的图表需要条形而不是点。当我使用scale_y_log10()时,它适用于条形图,但它绘制了错误的值(bar1的平均值为833,但显示在900以上;bar2的平均值为568,但显示更接近500)。

set.seed(10)

bar1 <- abs(rnorm(n = 232, mean = 833, sd = 1103)) + 1
bar2 <- abs(rnorm(n = 393, mean = 568, sd = 418)) + 1

graph_data <- data.frame(RT = c(bar1, bar2), group = c(rep(1, 232), rep(2, 393)))

ggplot(graph_data, aes(group, RT)) +
stat_summary(fun.y = mean, geom = 'point', position = 'dodge') +
stat_summary(fun.data = mean_cl_normal, geom = 'pointrange', position = 'position_dodge'(width = .9)) +
coord_trans(ytrans = "log10")

ggplot(graph_data, aes(group, RT)) +
stat_summary(fun.y = mean, geom = 'bar', position = 'dodge') +
stat_summary(fun.data = mean_cl_normal, geom = 'pointrange', position = 'position_dodge'(width = .9)) +
scale_y_log10(breaks = seq(300, 1000, 100))
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助!

Did*_*rts 6

您获得不同价值观的原因有两个。

首先,如果您查看帮助页面,coord_trans()您会看到:

coord_trans 与比例变换不同,它发生在统计变换之后,并且会影响几何图形的视觉外观 - 不能保证直线将继续保持直线。

这意味着coord_trans()只有坐标(y 轴)受到 log10 的影响,但scale_y_log10()实际数据在其他计算之前会进行对数转换。

其次,您的数据具有负值,当您应用于scale_y_log10()数据时,这些值将被删除,并且所有计算仅使用部分数据进行,因此您得到的平均值更大coord_trans()

Warning messages:
1: In scale$trans$trans(x) : NaNs produced
2: In scale$trans$trans(x) : NaNs produced
3: Removed 100 rows containing missing values (stat_summary). 
4: Removed 100 rows containing missing values (stat_summary). 
Run Code Online (Sandbox Code Playgroud)