2012-11-26 79 views
7

2つの重ね合わせた密度プロットでヒストグラムを作成しようとしています。問題:私は、次の例のように、1つの密度は完璧に動作しますが、伝説の破線が表示されません破線、なりたいさggplot2:凡例の点線

x<-sort(rnorm(1000)) 
data<-data.frame(x=x,Normal=dnorm(x,mean(x),sd=sd(x)),Student=dt(x,df=3)) 

ggplot(data,aes(y=x))+geom_histogram(aes(x=x,y=..density..), 
color="black",fill="darkgrey")+geom_line(aes(x=x,y=Normal,color="Normal"),size=1, 
linetype=2)+ylab("")+xlab("")+labs(title="Density estimations")+geom_line(aes(x=x,y=Student,color="Student"),size=1)+ 
scale_color_manual(values=c("Student"="black","Normal"="black")) 

任意のアイデア私は点線を取得する方法伝説?

ありがとうございました!

ライナー

Example Plot

答えて

4

それが簡単になり、 "ggplot" の方法は、一般的であることをデータが好きそれぞれの審美的なものを指定するための別々の列を持つ「ロング」形式です。この場合、線種は審美的に解釈されるべきです。以下のようなもので

ggplot(data,aes(y=x)) + 
    geom_histogram(aes(x=x,y=..density..),color="black",fill="darkgrey") + 
    geom_line(data = data.m, aes(x = x, y = value, linetype = variable), size = 1) + 
    ylab("") + 
    xlab("") + 
    labs(title="Density estimations") 

結果:このような何かを見て、あなたのプロットのコードを変更

library(reshape2) 
data.m <- melt(data, measure.vars = c("Normal", "Student"), id.vars = "x") 

そして:これに対処する最も簡単な方法は、reshape2パッケージに適切な形式にデータを準備をすることですこの:

enter image description here

+0

+1ライブラリーコールlolを追加するように私に思い出させることができました。 –

+0

@BrandonBertelsen - それは全く独立した2人の天才の仕事でした...私は答えを保存/アップロードしようとしていたので、あなたの答えとスティーブンの作物の両方を見ました... – Chase

+0

3つを作ってください。私たちはお互いに数分以内に投稿しました。 –

1

あなたは長い形式にこれを再構築したい...

x<-sort(rnorm(1000)) 
Normal=dnorm(x,mean(x),sd=sd(x)) 
Student=dt(x,df=3) 
y= c(Normal,Student) 
DistBn= rep(c('Normal', 'Student'), each=1000) 
# don't call it 'data' that is an R command 
df<-data.frame(x=x,y=y, DistBn=DistBn) 

head(df) 
      x   y DistBn 
1 -2.986430 0.005170920 Normal 
2 -2.957834 0.005621358 Normal 
3 -2.680157 0.012126747 Normal 
4 -2.601635 0.014864165 Normal 
5 -2.544302 0.017179353 Normal 
6 -2.484082 0.019930239 Normal 



ggplot(df,aes(x=x, y=y))+ 
    geom_histogram(aes(x=x,y=..density..),color="black",fill="darkgrey")+ 
    geom_line(aes(x=x,y=y,linetype=DistBn))+ 
    ylab("")+xlab("")+labs(title="Density estimations")+ 
    scale_color_manual(values=c("Student"="black","Normal"="black")) 

Rplot

+0

はF分布を非難しないでください! '?df'もRコマンドです:) – Chase

+0

Gawd ...そうです。私は気付かなかった。私のコードはdfでいっぱいです。 –

+0

私が誰かが私に指摘するまでは、あまりにも詳細な投稿があります.Rの関数名を上書きすることは実際には*悪いことを示しています。それを避けるためのベストプラクティスはまだありますが、4000以上のパッケージでは不可欠であり、多くの機能を提供します。 – Chase

関連する問題