Як візуалізувати функцію 3-D щільності?


19

Який найкращий спосіб графічно візуалізувати функцію 3-D щільності? Як я хотів би уявити ?

z=fX,Y(x,y)

Не потрібно, але Rкод для цього був би чудовим.


3
Я змінив це на більш статистичний.

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

1
Ці адекватні впевнені, але які інші мої варіанти /

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

1
@whuber, оригінальним питанням було просто "візуалізувати тривимірний набір даних" (ви можете бачити це в історії редагування). Я вважаю, що це тематично, хоча ваша думка, як було зроблено, явно правильна.
gung - Відновити Моніку

Відповіді:


25

Ну, є на увазі чотири можливі підходи (хоча я впевнений, що їх існує ще багато), але в основному ви можете викласти ці дані як перспективний графік, контурний графік, теплову карту або якщо ви віддаєте перевагу 3-D розсіювання сюжет (який є більш-менш перспективним графіком, коли у вас є значення для всіх пар. Ось декілька прикладів кожної (з добре відомого набору даних тривимірного типу ):( x , y )z(x,y)R

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

Ось два додаткові сюжети, які мають кращі риси побудови сюжету, ніж ті, що були раніше. введіть тут опис зображення введіть тут опис зображення Тож залежно від ваших уподобань буде диктувати, яким саме способом ви хочете візуалізувати 3-D набори даних.

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.