2016-01-12 11 views
0

У меня есть блок данных с двумя переменными, построенными вдоль оси 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.

Заранее спасибо за вашу помощь,

C.

+0

Вы можете окрасить отдельные точки на основе var3, но для создания цвета фона, как вы просили, вам нужна поверхность. Сначала вам нужно решить, как преобразовать var3 в поверхность. –

ответ

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) 
) 

Что дает что-то вроде этого (случайное, так как нет никакой связи между [х, у] и г в примере):

Я все еще пытаюсь добавить диаграмму рассеяния y ~ x поверх нее.

РЕДАКТИРОВАТЬ: решения с ggplot2 проще в использовании многослойных участков, но дает менее определенные границы для уровня участка (т.е. более непрерывный спектр цветов для значений г на графике). Добавление исходной (x, y) диаграммы рассеяния (в отличие от преобразованных значений, полученных с помощью expand.grid), возможно, например, через geom_point(). Еще одна возможность, менее привлекательным графически, но намного проще, чтобы использовать выражение 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