0

5列のテキストテーブルがあります。同じプロットに個別の密度プロットとして4つの列をプロットしたいと思います。私はこれを以下のように達成することができます: ここに画像の説明を入力してください

上記のプロットのコード:

library(ggplot2)
library(grid)

dat <- read.table(textConnection("
file        low        high       avg               lowest
102         4218.0     5437.0     4739.0            4723.0
103         4516.0     5765.0     5061.0            5036.0
104         4329.0     5554.0     4858.0            4838.0
107         4094.0     5261.0     4596.0            4578.0
108         4334.0     5569.0     4865.0            4846.0
109         4397.0     5596.0     4924.0            4896.0
110         4046.0     5257.0     4555.0            4547.0
"), header=TRUE)

x_low = dat$low
x_high = dat$high
x_avg = dat$avg
x_lowest = dat$lowest

plotter = ggplot() + geom_density(aes(x=x_low), colour="red", fill="red", alpha = .3, data=data.frame(dat$low))
plotter = plotter + geom_density(aes(x=x_high),colour="blue", fill="blue", alpha = .3, data=data.frame(dat$high))
plotter = plotter + geom_density(aes(x=x_avg), colour="green", fill="green", alpha = .3, data=data.frame(dat$avg))
plotter = plotter + geom_density(aes(x=x_lowest), colour="purple", fill="purple", alpha = .3, data=data.frame(dat$lowest))
plotter = plotter + xlim(c(2000,7000))
print(plotter)

プロットの横に凡例を付けたいと思います。私の理解から、私colourはの括弧の内側を動かす必要がありますaes

私はこれを次のように行います:

library(ggplot2)
library(grid)

dat <- read.table(textConnection("
file        low        high       avg               lowest
102         4218.0     5437.0     4739.0            4723.0
103         4516.0     5765.0     5061.0            5036.0
104         4329.0     5554.0     4858.0            4838.0
107         4094.0     5261.0     4596.0            4578.0
108         4334.0     5569.0     4865.0            4846.0
109         4397.0     5596.0     4924.0            4896.0
110         4046.0     5257.0     4555.0            4547.0
"), header=TRUE)

x_low = dat$low
x_high = dat$high
x_avg = dat$avg
x_lowest = dat$lowest

plotter = ggplot() + geom_density(aes(x=x_low, colour="red", fill="red"), alpha = .3, data=data.frame(dat$low))
plotter = plotter + geom_density(aes(x=x_high, colour="blue", fill="blue"), alpha = .3, data=data.frame(dat$high))
plotter = plotter + geom_density(aes(x=x_avg, colour="green", fill="green"), alpha = .3, data=data.frame(dat$avg))
plotter = plotter + geom_density(aes(x=x_lowest, colour="purple", fill="purple"), alpha = .3, data=data.frame(dat$lowest))

plotter = plotter + xlim(c(2000,7000))
print(plotter)

これは以下を出力します:

ここに画像の説明を入力してください

各プロットの色(最初のプロットと比較した場合)と凡例のラベルが間違っています。

どうやって:

  1. 色を修正する
  2. 各密度プロットの暗い輪郭を削除します
  3. 凡例を修正する
4

2 に答える 2

1

パッケージmeltからを使用してデータを再編成すると、これを単純化できます。reshape2次のコードは、正しい凡例、必要な塗りつぶしの色を取得し、密度プロットのアウトラインを削除すると思います。

dat.m <- melt(dat, id="file")
ggplot(dat.m, aes(value, fill=variable)) + geom_density(alpha = .3, color=NA) + scale_fill_manual(values=c("red", "blue", "green", "purple"))
于 2012-09-28T12:43:54.910 に答える
1

ダンM.の答えは慣用的で最も簡単なアプローチですが、状況によってはその場所があるかもしれない別のアプローチを示したかったのです。colour使用する色を含むスケールとスケールがfillあります。あなたが探しているスケールはアイデンティティスケールです。次の行を追加します。

plotter = plotter + scale_fill_identity("", 
  labels=c("red"="low", "blue"="high", "green"="avg", "purple"="lowest"),
  guide="legend") 
plotter = plotter + scale_colour_identity("",
  labels=c("red"="low", "blue"="high", "green"="avg", "purple"="lowest"),
  guide="legend")

引数は凡例のタイトルを取り除き(""そこに何かが必要な場合は、これを置き換えます)、labels各色にラベルを付ける必要があるものを指定します。色とラベルが正しく一致するようにするには、名前付きベクトルが必要です(そうでない場合、ラベルは色のアルファベット順に指定する必要があります)。guide=TRUE伝説を描きます。デフォルトでは、IDスケールには凡例がありません。 ここに画像の説明を入力してください

于 2012-09-28T16:19:54.480 に答える