第三变量绘图为背景密度

时间:2016-01-12 17:28:03

标签: r plot scatter

我有一个数据框,其中有两个变量沿x轴和y轴绘制,作为一个简单的散点图,我想添加第三个变量,但我想代表获得z轴,而不是将所述z变量的密度指定为散点图的背景。我觉得这样,取自文学:

enter image description here

数据无关紧要,因为我会使用这种情节的一般方法,但你可以使用这样的东西:

df<-data.frame(IDOBS=c(1:1000),var1=runif(1000,0,30),var2=runif(1000,1500,3000),var3=runif(1000,0.5,1.5))

因此var1和var2分别作为x和y变量,背景取决于var3。

提前感谢您的帮助,

下进行。

1 个答案:

答案 0 :(得分:0)

显然,我已经错过了这样一个情节的名字,这是一个轮廓图或水平图。格子中的简单函数允许您执行此操作。我使用了this R blog上的以下代码:

df<-data.frame(x=runif(1000,670,3300),y=runif(1000,2,30),z=runif(1000,0.5,1.5))

gni.loess = loess(z ~ x*y, data = df, degree = 2, span = 0.25)

gni.fit = expand.grid(list(x = seq(670, 3300, 0.1), y = seq(2, 30, 0.1)))

z = predict(gni.loess, newdata = gni.fit)
gni.fit$prod=as.numeric(z)

levelplot(prod ~ x*y, data = gni.fit,
          xlab = "x", ylab = "y",
          main = "z on an x*y grid",
          col.regions = terrain.colors(100)
)

这给出了类似的东西(随机,因为示例中[x,y]和z之间没有关系):

我仍然试图在它上面添加y~x的散点图。

编辑:使用ggplot2的解决方案更易于用于多层绘图,但为水平图提供了较少定义的边界(即绘图上z值的更连续的色谱)。例如,可以通过geom_point()添加原始(x,y)散点图(与使用expand.grid获得的变换值相对)。 另一种可能性,不那么吸引人的图形但更简单,是使用geom_point()表达式,如:

p<-ggplot(df,aes(x,y))
p + geom_point(data=df, aes(x,y, color=z))+ scale_colour_gradient(low = "green", high="red")

,并提供:

enter image description here