不同的色标geom_contour和geom_point

时间:2016-04-21 10:39:58

标签: r ggplot2 colors

我正在尝试使用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

在第三个图中,我希望水平颜色与点相同,或者至少是其他颜色标度。我试图将color=放入和放出aes,但它不会改变任何内容。

感谢

2 个答案:

答案 0 :(得分: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

请注意,我减少了点数并增加了线条的粗细以使线条更清晰可见

答案 1 :(得分: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))