使用ggplot未完全填充轮廓图

时间:2017-12-03 15:39:25

标签: r plot ggplot2 contour

我正在尝试使用ggplot完成我的第一个填充轮廓图。根据我的数据,我的表现如下:

enter image description here

但我的结果是:

a <- c(1, 1.1, 1, 1.3, 1.2, 2, 2.2, 2, 2.5, 2.1, 3, 3, 3, 3.1, 3.2)
b <- c(rep(c(0, 5, 10, 15, 20), 3))
c <- seq(0, 1000, by = 1000/14)

DF <- data.frame(a, b, c)

ggplot(DF, aes(x = a, y = b, z = c)) +
  geom_raster(aes(fill = c)) +
  geom_contour() + scale_fill_gradientn(colours = rainbow(10))

enter image description here

我做错了什么,哪里可以找到有关此图的更多数据信息?

1 个答案:

答案 0 :(得分:4)

以下是一个例子:

生成坐标:

b = c(0, 5, 10, 15, 20)
a = (1:30)/10

生成坐标的所有组合

df <- expand.grid(a, b)

通过a和b + 1的tcrossprod生成c(这完全是任意的,但会产生一个很好的模式)

df$c <- as.vector(a %o% (b+1))

ggplot(df, aes(x = Var1, y = Var2, z = c, fill = c)) +
  geom_raster(interpolate = T) + #interpolate for success 
  scale_fill_gradientn(colours = rainbow(10))

enter image description here

一般情况下,如果要在ggplot中绘制值(z值)矩阵,则需要通过melt中的reshape2将其转换为长格式,或者收集在tidyr中然后用于绘图。

您的数据非常稀疏,克服此问题的一种方法是生成缺失的数据。我将展示如何用黄土功能完成:

model <- loess(c ~ a + b, data = DF) #make a loess model based on the data provided (data in OP)

z <- predict(model, newdata = expand.grid(a = (10:30)/10, b = (0:200)/10)) #predict on the grid data

df <- data.frame(expand.grid(a = (10:30)/10, b = (0:200)/10), c = as.vector(z)) #append z to grid data

ggplot(df, aes(x = a, y = b, z = c, fill = c)) +
  geom_raster(interpolate = T)+
  scale_fill_gradientn(colours = rainbow(10))

enter image description here