Как визуализировать трехмерную функцию плотности?


19

Как лучше всего графически визуализировать трехмерную функцию плотности? Как я хотел бы визуализировать ?

z=fX,Y(x,y)

Не обязательно, но Rкод для этого был бы великолепен.


3
Я изменил это, чтобы быть более статистическим.

1
Если в этих опциях чего-то не хватает, будет очень полезно, если вы укажете, что это такое и каковы именно ваши потребности, чтобы мы могли найти вид визуализации, который бы лучше подходил им.
gung - Восстановить Монику

1
Это вполне адекватно, но каковы мои другие варианты /

3
@nico, я не думаю, что это было бы не по теме / лучше подходило для SO даже до изменений. Запрос на код был указан как необязательный, и data-visualizationявляется частью нашего мандата.
gung - Восстановить Монику

1
@whuber, первоначальный вопрос был просто «визуализировать 3D-набор данных» (вы можете увидеть его в истории редактирования). Я считаю, что это по теме, хотя ваша точка зрения в том виде, в каком она сделана, явно верна.
gung - Восстановить Монику

Ответы:


25

Ну, есть четыре возможных подхода, которые приходят на ум (хотя я уверен, что их гораздо больше), но в основном вы можете либо построить данные в виде перспективного графика, контурного графика, тепловой карты или, если вы предпочитаете 3-D разброс. plot (который является более или менее перспективным графиком, когда у вас есть значения для всех пар. Вот несколько примеров каждой из них (из хорошо известного трехмерного набора данных ):( x , y )z(x,y)R

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

Вот два дополнительных графика, которые имеют более приятные черты, чем те, которые были даны ранее. введите описание изображения здесь введите описание изображения здесь Таким образом, в зависимости от ваших предпочтений будет диктоваться, каким образом вы хотите визуализировать трехмерные наборы данных.

Here is the `R` code used to generate these four mentioned plots.
library(fields)
library(scatterplot3d)

#Data for illistarition
x = seq(-10, 10, length= 100)
y = x
f = function(x, y) { r = sqrt(x^2+y^2); 10 * sin(r)/r }
z = outer(x, y, f)
z[is.na(z)] = 1

#Method 1
#Perspective Plot
persp(x,y,z,col="lightblue",main="Perspective Plot")

#Method 2
#Contour Plot
contour(x,y,z,main="Contour Plot")
filled.contour(x,y,z,color=terrain.colors,main="Contour Plot",)

#Method 3
#Heatmap
image(x,y,z,main="Heat Map")
image.plot(x,y,z,main="Heat Map")

#Method 4
#3-D Scatter Plot
X = expand.grid(x,y)
x = X[,1]
y = X[,2]
z = c(z)
scatterplot3d(x,y,z,color="lightblue",pch=21,main="3-D Scatter Plot")

Эта тепловая карта ослепляет.
gung - Восстановить Монику

@Gung, (или кто-нибудь на самом деле) знаете, есть ли возможность добавить боковую панель, которая сообщает, каким значениям соответствуют цвета тепловой карты? Это, конечно, с помощью команды изображения.

3
Я думаю, вы хотите, чтобы image.plot()команда добавила цветную полосу. Кроме того, filled.contour()создается аналогичный график с цветной полосой, добавленной по умолчанию.
Макрос


2
Пока мы здесь, я просто укажу, что вы можете настроить цветовую палитру так, как вам хочется ... Самый простой (но, вероятно, не самый лучший) способ сделать это - использовать colorRampPalette(), например, если вы наберете, a = colorRampPalette(c('dark blue','blue','light blue','yellow','orange', 'red','dark red'))то создаст функцию aэто генерирует дискретное приближение цветового континуума, который проходит через эти цвета. Аргументом aявляется целое число, которое определяет разрешение этого дискретного приближения.
Макрос
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.