2016-11-22 9 views
1

私はyに連続変数を持ち、x軸にカテゴリ変数を持っています。カテゴリ変数では順序が意味を持ち、回帰をその指数に適合させるのは意味があります。つまり、c('a', 'b', 'c')の代わりにインデックス(order(c('a', 'b', 'c'))、つまりc(1, 2, 3))を使用し、これに対してモデルを適合させます。しかし、1つの変数が数値でない場合、ggplotはgeom_smooth(method = lm)に適合することを拒否します。 [OK]を、私は順序を使用していることを伝えることができます。ggplot2:カテゴリ変数のようなフィットgeom_smooth()は連続していました

geom_smooth(aes(x = order(hgcc), y = rtmean), method = lm) 

しかしときのレベルのサブセットのみ、それは、scales = 'free'とファセッティングとの良好でないデータフレームから全列のインデックスを取ります変数のxが1つのプロットに表示されます。回帰が右側にはるかにプロットされますので、全体のデータフレーム内のインデックスは、平均的にははるかに高いです:ここでは

regression pushed to right

は、最小限の作業例です:

require(ggplot2) 
load(url('http://www.ebi.ac.uk/~denes/54b510889336eb2591d8beff/sample_data.RData')) 

ggplot(adata12cc, aes(x = hgcc, y = rtmean, color = cls, size = log10(intensity))) + 
geom_point(stat = 'sum', alpha = 0.33) + 
geom_smooth(
    aes(x = order(hgcc), y = rtmean), 
    method = 'glm') + 
facet_wrap(~ uhgroup, scales = 'free') + 
scale_radius(guide = guide_legend(title = 'Intensity (log)')) + 
scale_color_discrete(guide = guide_legend(title = 'Class')) + 
xlab('Carbon count unsaturation') + 
ylab('Mean RT [min]') + 
ggtitle('RT vs. carbon count & unsaturation by headgroup') + 
theme(axis.title = element_text(size = 24), 
    axis.text.x = element_text(angle = 90, vjust = 0.5, size = 9, hjust = 1), 
    axis.text.y = element_text(size = 11), 
    plot.title = element_text(size = 21), 
    strip.text = element_text(size = 18), 
    panel.grid.minor.x = element_blank()) 

私は、これは知っていますいいやり方ではなく、ggplotを使うと、変数を参照して、ファセットでサブセット化されたものを実行することができれば、人生をはるかに簡単にすることができます。

答えて

1

主な問題は、あなたが見れば、すでにuhgroup によって分割され、お使いのx値ラベルということです

...私は解決策を持っていると思うが、私はあなたが何をしたいかわかりませんファクタはPC-O(38.7)PC(38.7などです...

したがって、まず最初に、x軸の新しいhgcc値を作成します。

adata12cc$hgcc_value <-as.factor(substr(adata12cc$hgcc, (nchar(levels(adata12cc$hgcc)[adata12cc$hgcc])-5), nchar(levels(adata12cc$hgcc)[adata12cc$hgcc]))) 

その後、別の問題は、あなたがgeom_pointgeom_smoothに異なるx軸を持っているということです。 1つはhgcc、もう1つはorder(hgcc_value)です。

解決策は同じ値を使用することです。ここではas.numeric(hgcc_value)order()の代わりに)を使用し、正確にはscale_x_continuousに改行のラベルを使用します。

ggplot(adata12cc, aes(x = as.numeric(hgcc_value), y = rtmean, color = cls, size = log10(intensity))) + 
    geom_point(stat = 'sum', alpha = 0.33) + 
    geom_smooth(
    aes(x = as.numeric(hgcc_value), y = rtmean), 
    method = 'glm') + 
    facet_wrap(~ uhgroup, scales = 'free') + 
    scale_radius(guide = guide_legend(title = 'Intensity (log)')) + 
    scale_color_discrete(guide = guide_legend(title = 'Class')) + 
    scale_x_continuous(name = "Carbon count unsaturation", 
        breaks=as.numeric(adata12cc$hgcc_value), 
        labels = adata12cc$hgcc_value, 
        minor_breaks = NULL)+ 
    ylab('Mean RT [min]') + 
    ggtitle('RT vs. carbon count & unsaturation by headgroup') + 
    theme(axis.title = element_text(size = 24), 
     axis.text.x = element_text(angle = 90, vjust = 0.5, size = 9, hjust = 1), 
     axis.text.y = element_text(size = 11), 
     plot.title = element_text(size = 21), 
     strip.text = element_text(size = 18), 
     panel.grid.minor.x = element_blank()) 

enter image description here

それはあなたが探していたものですか?

+0

うわー、これは本当にうまくいきます!どうもありがとう! :) – deeenes

関連する問題