在 R 中,以密度图添加轨迹
In R, add a trace in a density plotly
使用R中的plotly包,我想做一个密度图。实际上,我需要在图表中再添加一条密度线。我有一个数据,其中包含一些 public 公司按地理区域划分的收入信息。像这样
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)
有什么解决办法吗?
因为您没有命名传递给 add_trace
的参数,它会将它们解释为与默认参数顺序相对应。 add_trace
的用法是
add_trace(p = last_plot(), ..., group, color, colors, symbol, symbols,
size, data = NULL, evaluate = 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
使用R中的plotly包,我想做一个密度图。实际上,我需要在图表中再添加一条密度线。我有一个数据,其中包含一些 public 公司按地理区域划分的收入信息。像这样
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)
有什么解决办法吗?
因为您没有命名传递给 add_trace
的参数,它会将它们解释为与默认参数顺序相对应。 add_trace
的用法是
add_trace(p = last_plot(), ..., group, color, colors, symbol, symbols, size, data = NULL, evaluate = 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