我正在使用对数变换进行统计分析(反应时间),现在我想用对数变换的 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)
感谢您的帮助!
您获得不同价值观的原因有两个。
首先,如果您查看帮助页面,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)
| 归档时间: |
|
| 查看次数: |
5025 次 |
| 最近记录: |