Что именно является аргументом z в plot_ly?

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

z<-runif(50,0,1) 
y<-runif(50,1,2)
x<-runif(50,3,6)
plot_ly(x = ~x, y = ~y, z= ~z) %>% add_surface()

Я получаю следующую ошибку

Error: `z` must be a numeric matrix

Что именно делает z представляете, если не переменную, соответствующую вертикальной оси? Я видел пример Volcano, где они используют матрицу для генерации этого графика, но я все еще не уверен, что эта матрица z также представляет в этом примере.

Я хотел бы, чтобы кто-то изобразил легкую для понимания 3D-функцию, такую ​​как z=f(x,y) = x^2 + y^2 с использованием surface функциональность в plot_ly просто так я могу понять, как создать график на основе трех переменных.

1 ответ

Решение

Проблема с приведенным выше кодом состоит в том, что вы не указали тип трассировки - и то, что вам нужно передать в аргумент z, зависит от этой спецификации.

Передав аргументы x, y,z, вы хотите отобразить график scatter3d - вы можете проверить это, опустив add_surface():

z <- runif(50,0,1) 
y <- runif(50,1,2)
x <- runif(50,3,6)
plot_ly(x = x, y = y, z = z)

Который дает предупреждение:

Тип трассы не указан: на основании предоставленной информации, трассировка 'scatter3d' кажется подходящей. Подробнее об этом типе трассировки -> https://plot.ly/r/reference/ Режим scatter3d не указан:
Установка режима для маркеров Подробнее об этом атрибуте -> https://plot.ly/r/reference/

add_surface() с другой стороны, вы хотите отобразить трехмерный график поверхности. Вы уже упоминали пример вулкана. Для такого графика требуется только одна числовая матрица для создания графика (аргумент z).

Соответственно с вашим примером кода вы смешали оба типа графиков, что приводит к сообщению об ошибке.

Как избежать этой путаницы?

Если вы посмотрите на ?plot_ly есть описание для аргументов "...", переданных в соответствующий тип трассировки (z является одним из них):

Аргументы (то есть атрибуты) передаются типу трассировки. См. Schema() для получения списка допустимых атрибутов для данного типа трассировки (перейдя в traces -> type -> attribute).

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

# install.packages("listviewer")

library(plotly)
library(listviewer)
schema(jsonedit = interactive())

Я думаю, что это то, что вы были в первую очередь:

z <- runif(50,0,1) 
y <- runif(50,1,2)
x <- runif(50,3,6)
plot_ly(x = x, y = y, z = z, type = 'mesh3d')
Другие вопросы по тегам