随着时间的推移,我有一堆测量值,我想在 R 中绘制它们。这是我的数据示例。对于 4 个时间点,我有 6 个测量值:
values <- c (1012.0, 1644.9, 837.0, 1200.9, 1652.0, 981.5,
2236.9, 1697.5, 2087.7, 1500.8,
2789.3, 1502.9, 2051.3, 3070.7, 3105.4,
2692.5, 1488.5, 1978.1, 1925.4, 1524.3,
2772.0, 1355.3, 2632.4, 2600.1)
time <- factor (rep (c(0, 12, 24, 72), c(6, 6, 6, 6)))
这些数据的规模是任意的,实际上我将对其进行标准化,以便 t=0 的平均值为 1。
norm <- values / mean (values[time == 0])
到现在为止还挺好。使用
ggplot
,我绘制了各个点,以及通过每个时间点的平均值的线:
require (ggplot2)
p <- ggplot(data = data.frame(time, norm), mapping = aes (x = time, y = norm)) +
stat_summary (fun.y = mean, geom="line", mapping = aes (group = 1)) +
geom_point()
但是,现在我想应用对数刻度,这就是我遇到麻烦的地方。当我做:
q <- ggplot(data = data.frame(time, norm), mapping = aes (x = time, y = norm)) +
stat_summary (fun.y = mean, geom="line", mapping = aes (group = 1)) +
geom_point() +
scale_y_log2()
这条线在 t=0 时不会通过 0,正如您所期望的,因为 log (1) == 0。相反,这条线穿过 y 轴略低于 0。显然,
ggplot
应用对数转换后的平均值,这给出了不同的结果。我希望它在对数转换之前取平均值。
我怎么知道
ggplot
先应用平均值?有没有更好的方法来创建这个图表?
请您参考如下方法:
scale_y_log2()
将首先进行转换,然后计算几何。coord_trans()
将做相反的事情:首先计算几何图形,然后变换轴。
所以你需要coord_trans(ytrans = "log2")
而不是 scale_y_log2()