在R中,绘制密度曲线图

时间:2016-07-04 22:16:16

标签: r plotly density-plot

使用R中的plotly包,我想做一个desity情节。实际上,我需要在图表中再添加一个密度线。我根据地理区域有一些上市公司的收入信息。像这样的东西

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 个答案:

答案 0 :(得分:1)

因为您没有命名传递给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) )

现在,(在您的示例中计算dfdf2之后):

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