我正在使用日志变换进行统计分析(反应时间),现在我想用日志变换的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))
感谢您的帮助!
答案 0 :(得分:4)
有两个原因可以解释为什么你有不同的价值观。
首先,如果您查看coord_trans()
的帮助页面,您会看到:
coord_trans与缩放转换的不同之处在于它发生 经过统计变换后会影响视觉外观 geoms - 不能保证直线会继续 直白。
这意味着coord_trans()
仅scale_y_log10()
坐标(y轴)受log10影响,但scale_y_log10()
实际数据会在其他计算之前进行对数转换。
其次,您的数据具有负值,当您将coord_trans()
应用于数据时,这些值将被删除,并且所有计算仅使用部分数据进行,因此您获得的平均值会大于{{ 1}}。
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).