2016-07-04 4 views
0

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

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) 

Некоторое решение для этого?

ответ

1

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

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

Таким образом, в вызове функции, где вы указываете data.frame df2 как 2-й параметр, предполагается, что это соответствует параметру ..., который должен быть именованным списком. Вам нужно указать 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 

enter image description here