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

时间:2014-08-12 04:35:42

标签: 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))

感谢您的帮助!

1 个答案:

答案 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).