2016-04-21 123 views
1

我正在尝试使用geom_contour来创建一个使用几个轮廓层次的情节。每个这些级别定义了一个区域,我用geom_point绘制点。我的问题是,我没有设法在同一个图上显示点和点的色阶,不管是相同还是另一个。不同的色阶geom_contour和geom_point

MWE:

X <- data.frame(x1 = rnorm(1e4), x2 = rnorm(1e4)) 
X$z <- sqrt(rowSums(X^2)) 
X$level <- factor(floor(X$z)) 
xplot <- yplot <- c(-80:80)/10 
df_plot = data.frame(expand.grid(x1=xplot, x2=yplot)) 
df_plot$z = sqrt(rowSums(df_plot^2)) 

# plot several contour 
ggplot(data = df_plot, aes(x1,x2)) + geom_contour(aes(z=z, color=..level..), breaks = c(1:5)) 

levels with continuous color scale

# plot points with colors corresponding to zone 
ggplot(data = X, aes(x1,x2)) + geom_point(aes(color=level)) 

points with discrete color scale

# plot both 
ggplot(data = X, aes(x1,x2)) + geom_point(aes(color=level)) + 
geom_contour(data = df_plot, aes(z=z), breaks = 1:5) 

levels and points

在这第三个情节我d喜欢使用与点相同颜色的色阶,或者至少是其他色阶。我试图将color=放入和退出aes,但它不会改变任何内容。

感谢

回答

2

这里的问题是,你是混合离散和连续色标(分供方和轮廓,分别)和GGPLOT2使用两个不同的默认值。通过使该轮廓色阶不连续的,以及,你可以得到相同的颜色:

ggplot(data = X, aes(x = x1, y = x2)) + geom_point(aes(colour = level)) + 
    geom_contour(data = df_plot, aes(z = z, colour = factor(..level.. - 1)), 
       breaks = 0:5, size = 1) 

enter image description here

请注意,我已经减少点的数量,并增加了线条的粗细,使线条更好看

+0

谢谢,那正是我所期待的。事实上,我注意到了连续与离散色标之间的冲突,但我无法理解如何处理它。 – clemlaflemme

+0

“..level..'究竟做了什么? – clemlaflemme

0

这是得到你想要的东西稍微长篇大论方式,但你最终能成功。

ggplot(data = X, aes(x1,x2)) + 
    geom_point(aes(color=level)) + # Now add each contour separately. 
    geom_contour(data = df_plot, aes(z=z), breaks = 1, colour=rainbow(8)[1]) + 
    geom_contour(data = df_plot, aes(z=z), breaks = 2, colour=rainbow(8)[2]) + 
    scale_colour_manual(values=rainbow(8))