В R добавьте трассировку в графике плотности

Используя пакет plotly в R, я хотел бы сделать сюжетный план. На самом деле, мне нужно добавить еще одну линию плотности на мой график. У меня есть данные с информацией о доходах какой-то публичной компании по географическому региону. Что-то вроде этого

head(data)
id    income region 
  1     4556     1
  2     6545     1
  3    65465     2
  4    54555     1
  5    71442     2
  6     5645     6

В первый момент я проанализировал доход 5 и 6 регионов со следующим графиком плотности

reg56<- data[data$region %in% c(5,6) , ]
dens <- with(reg56, tapply(income, INDEX = region, density))
df <- data.frame(
x = unlist(lapply(dens, "[[", "x")),
y = unlist(lapply(dens, "[[", "y")),
cut = rep(names(dens), each = length(dens[[1]]$x))
)

# plot the density 
p<- plot_ly(df, x = x, y = y, color = cut) 

Но я хочу большего, чем это. Я хотел бы добавить общий доход, т.е. доход всех регионов. Я пробовал что-то это

data$aux<- 1
dens2 <- with(data, tapply(income, INDEX = 1, density)) 
df2 <- data.frame(
 x = unlist(lapply(dens2, "[[", "x")),
 y = unlist(lapply(dens2, "[[", "y")),
 cut = rep(names(dens2), each = length(dens2[[1]]$x)) )

p<- plot_ly(df, x = x, y = y, color = cut) 
p<-  add_trace(p, df2, x = x, y = y, color = cut)  
p
Error in FUN(X[[i]], ...) : 
'options' must be a fully named list, or have no names (NULL)

Какое-то решение для этого?


person Vasco    schedule 04.07.2016    source источник


Ответы (1)


Поскольку вы не называете параметры, которые передаете add_trace, они интерпретируются как соответствующие порядку параметров по умолчанию. Использование add_trace

add_trace(p = last_plot(),..., группа, цвет, цвета, символ, символы, размер, данные = NULL, оценка = FALSE)

Таким образом, в вашем вызове функции, где вы предоставляете data.frame df2 в качестве второго параметра, предполагается, что он соответствует параметру ..., который должен быть именованным списком. Нужно указать data = df2, чтобы add_trace понял, что это за параметр.

Давайте сгенерируем некоторые фиктивные данные для демонстрации на

library(plotly)
set.seed(999)
data <- data.frame(id=1:500, income = round(rnorm(500,50000,15000)), region=sample(6,500,replace=T) )

Теперь (после вычисления df и df2, как в вашем примере):

p <- plot_ly(df, x = x, y = y, color = cut) %>%
  add_trace(data=df2, x = x, y = y, color = cut)  
p

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

person dww    schedule 05.07.2016