Что именно является аргументом 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')