5

PNGファイルとして出力すると、x軸に数千ピクセルを占める非常に幅の広いグラフを作成しています。約 20 年間の毎日のデータがあります。(これは良い習慣と見なされる場合とそうでない場合がありますが、公開用ではなく、私自身の使用のためです。) グラフが非常に広いため、グラフをスクロールすると y 軸が表示されなくなります。したがって、y軸に値を表示するために、2年間隔でプロットにラベルを追加したいと考えています。結果のチャートは以下のようになりますが、コンパクトに保つ​​ために、30 日分の偽のデータのみを使用し、およそ 10 日ごとにラベルを付けています。

gggplot2 の y 軸値でプロットにラベルを付ける

これは多かれ少なかれ必要に応じて機能しますが、このチャートのようにアプローチするより良い方法があるかどうか疑問に思います (以下のコードを参照)。120、140、および 160 の 3 つの y 軸値のそれぞれに列があります。実際のデータにはさらに多くのレベルがあるため、geom_text を 15 回呼び出してすべてをプロット エリアに配置することになります。

Q. 日付ごとに 15 のラベルを付けて、20 個の奇数の日付すべてを一度にチャートに配置する簡単な方法はありますか?

require(ggplot2)

set.seed(12345)
mydf <- data.frame(mydate = seq(as.Date('2012-01-01'), as.Date('2012-01-31'), by = 'day'),
                     price = runif(31, min = 100, max = 200))

mytext <- data.frame(mydate = as.Date(c('2012-01-10', '2012-01-20')),
                col1 = c(120, 120), col2 = c(140,140), col3 = c(160,160))

p <- ggplot(data = mydf) +
    geom_line(aes(x = mydf$mydate, y = mydf$price), colour = 'red', size = 0.8) +
    geom_text(data = mytext, aes(x = mydate, y = col1, label = col1), size = 4) +
    geom_text(data = mytext, aes(x = mydate, y = col2, label = col2), size = 4) +
    geom_text(data = mytext, aes(x = mydate, y = col3, label = col3), size = 4)

print(p)
4

1 に答える 1

7

ggplot2 はデータが長い形式であるのが好きなのでmelt()、テキストを長い形式にすると、次の呼び出しを 1 回行うことができますgeom_text()

require(reshape2)
mytext.m <- melt(mytext, id.vars = "mydate")

次に、プロットコマンドは次のようになります。

ggplot(data = mydf) +
  geom_line(aes(x = mydf$mydate, y = mydf$price), colour = 'red', size = 0.8) +
  geom_text(data = mytext.m, aes(x = mydate, y = value, label = value), size = 4)
于 2012-07-15T14:30:45.150 に答える