2013-08-30 5 views
3

(Извините, если мой английский не совершенен ...: -s)Как нарисовать заполненный. Контурный график с data.frame из трех переменных в R (без регулярной сетки)?

Мой вопрос почти то же самое, что в этой теме: Creating a filled contour plot using data in lists

Но разница в том, что я хотел бы сюжет плотность, соответствующая моим координатам (x, y), всего в 1 направлении! Объясняю: У меня есть data.frame как это:

X <- matrix(c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3), nrow=4) 
Y <- matrix(c(-1.0190, -0.9617, -0.9044, -0.8470, -1.0617, -0.9641, -0.8664, -0.7688, 0.4623, 0.6012, 0.7401, 0.8790), nrow=4) 
Z <- matrix(c(3.9216, 3.9216, 3.9216, 11.7647, 1.9608, 1.9608, 1.9608, 11.7647, 1.9608, 1.9608, 9.8039, 9.8039), nrow=4) 
Niveau <- data.frame(X=c(X),Y=c(Y),Z=c(Z)) 

Х representes рентгеновские координаты Y, Y-координаты и Z плотность в процентах в только направлении Y. Для каждой х-координаты я вычислял плотность в направлении Y. И результат в Z-векторе. Вы можете видеть, что это не регулярная сетка в (x, y). И я хотел бы построить на «контур участка» от плотности Z, но до сих пор я не успех ... я попробовал эту команду:

ggplot(Niveau, aes(x=X, y=Y, z=Z)) + geom_density2d() 

Но вычерчивает плотность в х И y, и я хочу только в направлении Y. Когда я попробовал команду:

filled.contour(t(Z), nlevels=10) 

Он не уважает (х, у) координаты. И это невозможно осуществить:

filled.contour(X,Y,Z, nlevels=10) 

После, некоторых исследований, я нашел эту тему, и мой Probleme тот же: How to draw a contour plot when data are not on a regular grid?

Но ответ не соответствует: решение «регулярное сетка "в (x, y), и это не то, что у меня есть! Кто-нибудь может помочь?

Спасибо!

+1

Вы можете адаптировать этот ответ: http://stackoverflow.com/questions/8508059/simple-r-3d-interpolation-surface-plot/8508463#8508463 –

+0

Спасибо !!! Оно работает !! С того времени я искал ... Вот что я сделал: my.heat.colors <- функция (х) {Rev (heat.colors (х, альфа = 1))} my.matrix <- interp (X, Y, Z, длина = 500) ind.mat.na <- which (is.na (c (my.matrix $ z))) my.matrix $ z [ind.mat.na ] <- 0 fill.contour (my.matrix, nlevels = 10, color = my.heat.colors) И теперь я нарисую контуры на этом. Еще раз спасибо! – sandikou

+0

Поздравляем за решение вашей собственной проблемы (с подсказкой). Это будет хорошая форма и улучшит репутацию StackOverflow, если вы пойдете дальше и опубликуете свое решение в качестве ответа (возможно, вам придется подождать несколько часов - я не уверен). –

ответ

3

Спасибо !!! Оно работает !! С того времени я искал ...

Вот что я сделал:

library(akima) 
my.heat.colors <- function(x) { rev(heat.colors(x, alpha=1)) } 
my.matrix <- interp(X,Y,Z) 
ind.mat.na <- which(is.na(c(my.matrix$z))) 
my.matrix$z[ind.mat.na] <- 0 
filled.contour(my.matrix, nlevels=10, color=my.heat.colors) 

А теперь будет строить контуры на этом.

Еще раз спасибо!

 Смежные вопросы

  • Нет связанных вопросов^_^