Отображение третьей переменной как плотности фона

У меня есть кадр данных с двумя переменными, построенными по осям x и y, как простой график рассеяния, и я хотел бы добавить третью переменную, но вместо получения оси z я хочу представить плотность точек указанная переменная z в качестве фона для диаграммы рассеяния. Я бы выглядел так, взято из литературы:

введите здесь описание изображения

Данные не будут иметь значения, так как я буду работать с общим методом для такого графика, но вы можете использовать что-то вроде этого:

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.


person Chris. Z    schedule 12.01.2016    source источник
comment
Вы можете раскрасить отдельные точки на основе значения var3, но для создания цвета фона, как вы просили, вам нужна поверхность. Сначала вам нужно решить, как var3 будет преобразован в поверхность.   -  person Rohit Das    schedule 12.01.2016


Ответы (1)


Так что, по-видимому, я пропустил название такого графика, который является контурным графиком или графиком уровня. Простая функция в решетке позволяет это сделать. Я использовал следующий код, найденный в этот блог R:

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 поверх нее.

EDIT: решение с ggplot2 проще использовать для многослойных графиков, но дает менее определенные границы для графика уровня (т.е. более непрерывный цветовой спектр для значений z на графике). Добавление исходной (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")

Предоставление:

введите здесь описание изображения

person Chris. Z    schedule 13.01.2016