4

時間の経過に伴う一連の測定値があり、それらを 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()

log (1) == 0 であるため、予想されるように、直線は t=0 で 0 を通過しません。代わりに、直線は 0 より少し下の y 軸を横切ります。明らかに、対数変換ggplotの平均を適用すると、異なる結果。対数変換の平均をとってほしい。

ggplot最初に平均を適用するように指示するにはどうすればよいですか? このグラフを作成するより良い方法はありますか?

4

3 に答える 3

9

scale_y_log2()最初に変換を行い、次にジオメトリを計算します。

coord_trans()反対のことを行います: 最初にジオメトリを計算し、軸を変換します。

だからあなたはcoord_trans(ytrans = "log2")代わりに必要ですscale_y_log2()

于 2010-08-02T13:06:53.830 に答える
3

coord_trans() を使用せずにデータを変換したい場合、それを解決するための回避策は、逆変換する関数を作成することです。

f1 <- function(x) {
  log10(mean(10 ^ x)) 
}

stat_summary (fun.y = f1, geom="line", mapping = aes (group = 1))
于 2016-11-02T14:24:31.837 に答える