2014-04-16 65 views
0

我有一個在這裏貼前面同樣的問題: R-style axes with ggplot 我已經試過這是由巴蒂斯特建議的解決方案:R-風格軸與ggplot - 再次

library(ggplot2) 

d <- data.frame(x=1:10, y=rnorm(10)) 

base_breaks_x <- function(x){ 
    b <- pretty(x) 
    d <- data.frame(y=-Inf, yend=-Inf, x=min(b), xend=max(b)) 
    list(geom_segment(data=d, aes(x=x, y=y, xend=xend, yend=yend)), 
     scale_x_continuous(breaks=b)) 
} 
base_breaks_y <- function(x){ 
    b <- pretty(x) 
    d <- data.frame(x=-Inf, xend=-Inf, y=min(b), yend=max(b)) 
    list(geom_segment(data=d, aes(x=x, y=y, xend=xend, yend=yend)), 
     scale_y_continuous(breaks=b)) 
} 

ggplot(d, aes(x,y)) + 
    geom_point() + 
    theme_bw() + 
    opts(panel.border = theme_blank(), 
     panel.grid.major = theme_blank(), 
     panel.grid.minor = theme_blank()) + 
    base_breaks_x(d$x) + 
    base_breaks_y(d$y) 

,發現這只是工作當情節美學 只是由aes(x,y)組成。從一個幀中抽取數據,其中一列包含顏色變化的因素,例如,

d <- data.frame(x=1:10, y=rnorm(10),name=rep(c("blue","red"),5)) 
ggplot(d, aes(x,y,colour=name))+ ... 

提供錯誤消息

"Error in eval(expr, envir, enclos) : object 'name' not found" 

這又如何解決?

非常感謝您的幫助!

+0

有作爲ggtheme封裝的開放特性請求一個清潔的解決方案IMO:見[這裏討論](https://github.com/jrnold/ggthemes/pull/18) – baptiste

回答

0

因爲你設置colour=nameggplot()調用內部和base_breaks_x()你得到這個錯誤,並base_breaks_y()包含geom_segment()調用,也試圖尋找變量name這些函數的dataframes內。有兩種方法可以解決問題。

首先,將colour=nameggplot()移動到geom_point()aes()

ggplot(d, aes(x,y)) + 
    geom_point(aes(colour=name)) 

其次,加入inherit.aes=FALSEgeom_segment()電話裏面修改功能base_breaks_x()base_breaks_y()

geom_segment(data=d, aes(x=x, y=y, xend=xend, yend=yend),inherit.aes=FALSE) 
+0

是!!現在我明白ggplot的內部運作更好了!謝謝! – catfranz