2017-07-11 10 views
1

2つのカテゴリのデータセットがあります。私は、各カテゴリーが独自の色とそれ自身の独立した回帰直線を持つrでハイハター散布図を描きたい。私は異なる色を実現するためにforループを使い、私の回帰直線の2つの点を計算しました。問題は、散布図に1つの回帰直線しか描けないことです。私はループ内に線を描こうとしましたが、%>%を使って線を追加しました。どちらもうまくいきませんでした。また、このグラフにタイトルを追加することもできません。 ここに私のコードです。は、ハイチャートの散布図に2番目の回帰線を描くことができません

data<-data.frame(gene=rnorm(20),metab=rnorm(20),type=sample(0:1,1000,rep=TRUE))[1:20,]] 
b<-glm(data$metab~data$gene+data$type+data$gene:data$type) 
coefficients<-t(b$coefficients) 
i<-coefficients[,1] 
g<-coefficients[,2] 
c2<-coefficients[,3] 
g.c2<-coefficients[,5] 

u<-matrix(c(1,0)) 
type1<-u[1,1] 
type2<-u[2,1] 

largest1<- max(data$gene[data$type==type1]) 
largest2<-max(data$gene[data$type==type2]) 
min1<-min(data$gene[data$type==type1]) 
min2<-min(data$gene[data$type==type2]) 

line1<-data.frame(x=c(largest1,min1),y=c(g*largest1+i,min1*g+i)) 
line2<-data.frame(x=c(largest2,min2),y=c(g*largest2+g.c2*largest2+i+c2,min2*g+i+c2)) 

hc<-highchart(width = 800, height = 700) 
#hc_title(text = "scatterplot", 
      #style = list(color = '#2E1717',fontSize = '20px', 
          #fontWeight = 'bold')) %>% 
for(type in u){ 
     hc<-hc%>% 
     hc_add_series_scatter(data$gene[data$type==type],data$metab[data$type==type],name=sprintf("type %s", type), 
           showInLegend = TRUE) 
     #if(type==type1){     
     # hc_add_series(hc,data=line1,type='line',name='regression line1') 
     #}else if (type==type2){     
     # hc_add_series(hc,data=line2,type='line',name='regression line2') 
     #} 
} 

hc 

hc_add_series(hc,data=line1,type='line',name='regression line1',enableMouseTracking=FALSE,marker=FALSE) %>% 
hc_add_series(hc,data=line2,type='line',name='regression line2',enableMouseTracking=FALSE,marker=FALSE) 

line1とline2は、2点の2つの回帰線を含むdata.frameです。

答えて

0

提供したコードを実行しようとするとエラーが発生します。最初の行は、コードの実行を妨げる]で終わります。

これを削除すると、coefficients[,5]インデックスの範囲外のエラーが発生します。 [,4]に変更した問題を修正しました。

コードの最後の2行にhc_add_serieshcを使用しています。これにより、単一の変更がトリガーされ、グラフが開き、hcに保存されません。私はコードの下に使用しているエンドで

data<-data.frame(gene=rnorm(20),metab=rnorm(20),type=sample(0:1,1000,rep=TRUE))[1:20,]] 
b<-glm(data$metab~data$gene+data$type+data$gene:data$type) 
coefficients<-t(b$coefficients) 
i<-coefficients[,1] 
g<-coefficients[,2] 
c2<-coefficients[,3] 
g.c2<-coefficients[,4] 

u<-matrix(c(1,0)) 
type1<-u[1,1] 
type2<-u[2,1] 

largest1<- max(data$gene[data$type==type1]) 
largest2<-max(data$gene[data$type==type2]) 
min1<-min(data$gene[data$type==type1]) 
min2<-min(data$gene[data$type==type2]) 

line1<-data.frame(x=c(largest1,min1),y=c(g*largest1+i,min1*g+i)) 
line2<-data.frame(x=c(largest2,min2),y=c(g*largest2+g.c2*largest2+i+c2,min2*g+i+c2)) 

hc <- highchart(width = 800, height = 700) %>% 
    hc_title(text = "scatterplot", style = list(color = '#2E1717',fontSize = '20px', fontWeight = 'bold')) 

for(type in u){ 
     hc <- hc %>% 
     hc_add_series_scatter(data$gene[data$type==type],data$metab[data$type==type],name=sprintf("type %s", type),showInLegend = TRUE) 
     #if(type==type1){     
     # hc_add_series(hc,data=line1,type='line',name='regression line1') 
     #}else if (type==type2){     
     # hc_add_series(hc,data=line2,type='line',name='regression line2') 
     #} 
} 

hc <- hc %>% 
hc_add_series(data=line1,type='line',name='regression line1',enableMouseTracking=FALSE,marker=FALSE) %>% 
hc_add_series(data=line2,type='line',name='regression line2',enableMouseTracking=FALSE,marker=FALSE) 

hc 

二回帰シリーズが追加されますが、データが間違っている - あなたは間違ったデータ形式を使用しています。シリーズデータとして、数値の配列であるxとyを持つオブジェクトがあります。シリーズデータとしては、[X,Y](X、Yは数字)のような配列や、{x: X, y: X}(X、Yは数字、x、yは変数名)のような配列の配列を持たなければなりません。問題はJSレベルから見ることができ、Rで修正する必要があります。私はRの専門家ではありませんが、私がここに書いたものは良いスタートだと思います。

+1

ありがとうございました!それは私の問題を完全に解決する! –

関連する問題