0

qplot()3 つの応答変数を含む密度プロットを作成したいと考えています。したがって、グラフは標高 (x) に対する密度 (y) となり、標高 (x 軸) の変化に応じてそれぞれの密度がどのように変化するかを示す 3 つの色分けされた密度関数が表示されます。

最初に、3 つの応答変数 (データセット "CAIRNGORM" の 3 列) を "ZONES" という小さなサブセットにサブセット化しました。

ZONES<-CAIRNGORM[c("prop_Cal", "prop_Emp", "prop_Jun")]

次に、qplot を作成しようとしました。

library(ggplot2)
qplot(Elevation, data=CAIRNGORM, geom="density", fill="ZONES", alpha=I(0.5))

これはプロットを作成しますが、prop_Cal、prop_Emp、prop_Jun のそれぞれに 1 つずつ、3 つのトレースを提供する代わりに、1 つのトレースしかなく、標高データの密度を示しているように見えます-直線!

これについて誰かの助けを本当に感謝します-x変数の代わりに「ZONES」に含まれる3つのトレースを構築するようにqplotに指示するにはどうすればよいですか? ありがとう

編集:私のデータの短縮版(スタックオーバーフローに正しいコードフォーマットを入れようとしています):

> head(CAIRNGORM)
  position group Elevation 
1       Q1     A       680   
2       Q2     A       730   
3       Q3     A       780  
4       Q4     A       830     
5       Q5     A       880      
6       Q6     A       930   
  prop_bar prop_Cal prop_Vac prop_Emp prop_Jun prop_Ces prop_Eri ZONES.prop_Cal
1     0.00     1.00      0.0        0        0     0.36      0.4           1.00
2     0.00     1.00      0.0        0        0     0.28      0.0           1.00
3     0.00     0.84      0.6        0        0     0.48      0.0           0.84
4     0.00     1.00      0.0        0        0     0.00      0.0           1.00
5     0.24     0.76      0.0        0        0     0.72      0.0           0.76
6     0.36     0.72      0.0        0        0     0.00      0.0           0.72
  ZONES.prop_Emp ZONES.prop_Jun
1              0              0
2              0              0
3              0              0
4              0              0
5              0              0
6              0              0

> head(ZONES)
  prop_Cal prop_Emp prop_Jun
1     1.00        0        0
2     1.00        0        0
3     0.84        0        0
4     1.00        0        0
5     0.76        0        0
6     0.72        0        0
4

1 に答える 1

1

ggplot2「ワイド」形式よりも「ロング」形式のデータを優先します。1 つのグラフで 3 つの密度プロットを取得する方法を次に示します。サンプル データの 2 つの列はすべてゼロであるため、説明のためにいくつかの偽のデータを作成しました。

library(reshape2) # For the melt function

# Fake data
ZONES = data.frame(prop_Cal=rnorm(100), 
                   prop_Emp=rnorm(100,-10,3), 
                   prop_Jun=rnorm(100,10,0.5))

# Melt into long format (take a look at the melted data frame to see what melt is doing)
ZONES.M <- melt(ZONES)

ggplot(ZONES.M, aes(value, fill=variable)) +
     geom_density(alpha=0.5)

variable元のワイド フォーマット データ フレームの各列の名前が含まれています。value値が含まれています。fill美学を に設定すると、 のレベルごとに個別の密度プロットを作成するようにvariable指示されます。ggplotvariable

ここに画像の説明を入力

prop_Calまたは他の 2 つの変数の密度を標高に対してプロットすることはできません。変数の (1 次元) 密度プロットは、本質的に単一の変数に関するものです。標高と他の 3 つの変数との関係を見つけようとしている場合は、バイオリン プロットが必要になることがあります。例えば:

# Fake data with Elevation added
ZONES = data.frame(Elevation=rep(c(10,20,30,40),each=25), 
                   prop_Cal=rnorm(100), 
                   prop_Emp=rnorm(100,-10,3), 
                   prop_Jun=rnorm(100,10,10))

# Melt into long format, this time with Elevation as an id variable
ZONES.M <- melt(ZONES, id.var="Elevation")

ggplot(ZONES.M, aes(Elevation, value, group=Elevation)) +
  geom_violin() +
  facet_grid(. ~ variable)

これで、元の 3 つの列変数ごとに、標高の各値の密度プロットができました。cut(標高帯ごとにグループ化する場合は、関数を使用して、最初に標高の複数の値を結合することもできます。)

ここに画像の説明を入力

代わりに、各変数と標高の散布図が必要な場合は、次のようにすることができます。

ggplot(ZONES.M, aes(Elevation, value, group=Elevation)) +
  geom_point(colour="black", fill="lightblue", alpha=0.5, pch=21) +
  facet_grid(. ~ variable)

回帰直線を追加したい場合 (標高と他の 3 つの変数の関係を要約したい場合は、これが実際に探しているものかもしれません)、次のようにします。

ggplot(ZONES.M, aes(Elevation, value, group=Elevation)) +
  geom_point(colour="black", fill="lightblue", alpha=0.5, pch=21) +
  geom_smooth(aes(group=1)) +  
  facet_grid(. ~ variable)
于 2014-12-22T06:53:28.890 に答える