ama*_*ion 4 statistics logarithm r ggplot2
随着时间的推移,我有一堆测量值,我想在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)))
Run Code Online (Sandbox Code Playgroud)
这些数据的规模是任意的,实际上我将对其进行标准化,使得t = 0的平均值为1.
norm <- values / mean (values[time == 0])
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.使用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()
Run Code Online (Sandbox Code Playgroud)
但是,现在我想应用对数刻度,这就是我的麻烦开始的地方.当我做:
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()
Run Code Online (Sandbox Code Playgroud)
这条线在t = 0时不会经过0,正如您所期望的那样因为log(1)== 0.而是该线穿过y轴略低于0.显然,在对数变换后ggplot应用均值,这给出了不同的结果.我希望它在日志转换之前采用均值.
我ggplot该如何判断先应用均值?有没有更好的方法来创建此图表?
scale_y_log2() 将首先进行转换然后计算geoms.
coord_trans() 将做相反的事情:首先计算geoms,然后转换轴.
所以你需要coord_trans(ytrans = "log2")而不是scale_y_log2()