2016-04-21 128 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))