2016-11-22 73 views
1

我有一個連續變量,並在x軸的分類。在分類變量中,順序是有意義的,根據其索引來擬合迴歸是有意義的,我的意思是代替c('a', 'b', 'c')使用索引(order(c('a', 'b', 'c')),即c(1, 2, 3)),並使模型與此相適應。但是,如果一個變量不是數字,ggplot會拒絕匹配geom_smooth(method = lm)。好吧,那麼我可以告訴它使用的順序:ggplot2:擬合geom_smooth()像分類變量是連續的

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

但隨後它需要整列的索引從數據幀,這是不好用scales = 'free'刻面,當只有水平的一個子集x變量的變量出現在一個圖上。在整個數據幀的指標是平均高得多,所以迴歸將遠遠右側繪製:

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

我想我已經得到了解決,但我不知道你想要什麼......

的主要問題是,你的x值的標籤,已經被uhgroup 分裂如果你看一下因素他們是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]))) 

然後另外一個問題是,你有不同的x軸爲geom_pointgeom_smooth。一個是hgcc,另一個是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

相關問題