7

それぞれ長さが異なる 2 つのベクトルがあるとします。両方のベクトルの密度を重ね合わせた 1 つのプロットを生成したいと考えています。私がやるべきだと思ったのはこれです:

vec1 <- data.frame(x=rnorm(2000, 0, 1))
vec2 <- data.frame(x=rnorm(3000, 1, 1.5))
ggplot() + geom_density(aes(x=x, colour="red"), data=vec1) + 
  geom_density(aes(x=x, colour="blue"), data=vec2)

次に、これを行う必要があると思いました:

vec1 <- data.frame(x=rnorm(2000, 0, 1))
vec2 <- data.frame(y=rnorm(3000, 1, 1.5))
ggplot() + geom_density(aes(x=x, colour="red"), data=vec1) + 
  geom_density(aes(x=y, colour="blue"), data=vec2)

色が混同されるため、これらのどちらも機能しません。

StackOverflow 1 2で見つけた別の解決策に基づいて、これを試す必要があることに気付きました。

vec1 <- data.frame(x=rnorm(2000, 0, 1), grp="vec1")
vec2 <- data.frame(x=rnorm(3000, 1, 1.5), grp="vec2")
allDat <- rbind(vec1, vec2)

ggplot(allDat, aes(x, colour=grp)) + geom_density()

ggplot(allDat, aes(x, colour=grp)) + geom_density() + 
  scale_colour_manual(values=c("green", "blue"))

ggplot(allDat, aes(x, colour=grp)) + geom_density() + 
  scale_colour_manual(values=c(vec2="green", vec1="blue"))

OK、元の問題を解決しました。しかし、私が上で試した最初のものに似た何かをする方法はありますか? ドキュメントでの言い回しからするggplotと、そう思ったでしょう。提案をお待ちしております。

4

3 に答える 3

19

colourパラメータの割り当てをから移動すると、すべてが正常に機能しますaes()

vec1 <- data.frame(x=rnorm(2000, 0, 1))
vec2 <- data.frame(x=rnorm(3000, 1, 1.5))

library(ggplot2)

ggplot() + geom_density(aes(x=x), colour="red", data=vec1) + 
  geom_density(aes(x=x), colour="blue", data=vec2)

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

于 2012-08-30T17:35:28.570 に答える
3

凡例も必要な場合は、これを試してください。

df <- rbind(data.frame(x=rnorm(2000, 0, 1), vec='1'),
            data.frame(x=rnorm(3000, 1, 1.5), vec='2'))
ggplot(df, aes(x, group=vec, col=vec)) + geom_density(position='dodge')

ここに画像の説明を入力

于 2016-10-12T12:01:36.007 に答える
0

私のデータは単一のデータフレームに含まれていたため、上記のソリューションにはいくつかの問題がありました。美学での使用... data=df$Aは機能しません。これは、サポートされていないクラス「数値」のベクトルを ggplot に提供するためです。

したがって、同じデータ フレームに含まれるすべての異なる列をオーバーレイするには、次のことをお勧めします。

vec1 <- rnorm(3000, 0, 1)
vec2 <- rnorm(3000, 1, 1.5)

df <- data.frame(vec1, vec2)
colnames(df) <- c("A", "B")

library(ggplot2)

ggplot() + geom_density(aes(x=df$A), colour="red") + 
  geom_density(aes(x=df$B), colour="blue")

ここに画像の説明を入力

ほとんどの人にとって、これは当たり前のことのように思えるかもしれませんが、初心者の私にとってはそうではありませんでした。お役に立てれば。

于 2016-10-12T11:02:41.820 に答える