2011-06-28 126 views
2

我正在使用ggplot2在图上显示线条和点。我想要做的是让所有线条都具有相同的颜色,然后显示由属性着色的点。我的代码如下:使用ggplot2如何在绘制线之后用aes()绘制点?

# Data frame 
dfDemo <- structure(list(Y = c(0.906231077471568, 0.569073561538186, 
0.0783433165521566, 0.724580209473378, 0.359136092118470, 0.871301974471722, 
0.400628333618918, 1.41778205350433, 0.932081770977729, 0.198188442350644 
), X = c(0.208755495088456, 0.147750173706688, 0.0205864576474412, 
0.162635017485883, 0.118877260137735, 0.186538613831806, 0.137831912094464, 
0.293293029083812, 0.219247919537514, 0.0323148791663826), Z = c(11112951L, 
11713300L, 14331476L, 11539301L, 12233602L, 15764099L, 10191778L, 
12070774L, 11836422L, 15148685L)), .Names = c("Y", "X", "Z" 
), row.names = c(NA, 10L), class = "data.frame") 

# Variables 
X = array(0.1,100) 
Y = seq(length=100, from=0, by=0.01) 

# make data frame 
dfAll <- data.frame() 

# make data frames using loop 
for (x in c(1:10)){ 

    # spacemate calc 
    Floors = array(x,100) 

    # include label 
    Label = paste(' ', toString(x), sep="") 
    df1 <- data.frame(X = X * x, Y = Y, Label) 

    # merge df1 to cumulative df, dfAll 
    dfAll <- rbind(dfAll, df1) 

} 

# plot 
pl <- ggplot(dfAll, aes(x = X, y = Y, group = Label, colour = 'Measures')) + geom_line() 

# add points to plot 
pl + geom_point(data=dfDemo, aes(x = X, y = Y)) + opts(legend.position = "none") 

这几乎工作,但我无法通过Z我这样做时,颜色的点。我可以使用下面的代码绘制分别由Z彩色点:

ggplot(dfDemo, aes(x = X, y = Y, colour = Z)) + geom_point() 

但是,如果我绘制线后使用类似的代码:

pl + geom_point(data=dfDemo, aes(x = X, y = Y, colour = Z)) + opts(legend.position = "none") 

我收到以下错误:

Error: Continuous variable() supplied to discrete scale_hue. 

我不明白如何将点添加到图表,以便我可以通过值为它们着色。我很欣赏任何建议如何解决这个问题。

回答

4

问题在于它们正在碰撞两个颜色比例,一个来自ggplot调用,另一个来自geom_point。如果你想要一种颜色的线条和不同颜色的点,那么你需要从ggplot调用中清除颜色设置,并将它放在aes调用之外的geom_line中,这样它就不会被映射。使用I()来定义颜色,否则它会认为只是一个变量。

pl <- ggplot(dfAll, aes(x = X, y = Y, group = Label)) + 
       geom_line(colour = I("red")) 
    pl + geom_point(data=dfDemo, aes(x = X, y = Y, colour = Z)) + 
        opts(legend.position = "none") 

HTH

+0

你只需要qplot'I'。 – hadley