У меня есть следующий код. Он выбирает данные и строит сюжет. Код перебирает переменную «критерий» и в конце цикла вставляет график в соответствующий индекс.
Все работает нормально, за исключением того, что все элементы, кроме последних, имеют нулевое значение и включен только последний график.
Как мне включить все графики в списке?
criteria <- c("A", "B", "C")
for(i in 1:length(criteria)){
plotTbl <- dataTbl[Site == criteria[i]]
plotTbl <- unique(plotTbl[ ,N := .N, by = .(Site, Var)])
noexacCols <- unique(c(brewer.pal(name="Set1", n = 9),
brewer.pal(name="Set2", n = 8),
brewer.pal(name="BrBG", n =11),
brewer.pal(name="Paired", n = 12)))
noexacCols <- noexacCols[i]
colMapper <- data.table(Var = sort(unique(plotTbl[,Var])))
colMapper[, colorCodes := noexacCols]
plotTbl <- plotTbl[colMapper, on = .(Var), nomatch = 0]
plotTbl[ ,Percent := round(100*N/sum(N), 1)]
plotTbl[ ,text2display := paste0("Site = ",Site,
"<br>",category, " = ", Var,
"<br>N = ", N, " (", Percent, "%)")]
f1 <- list(
family = "Arial, sans-serif",
size = 14,
color = "black"
)
f2 <- list(
family = "Arial, sans-serif",
size = 12,
color = "black"
)
a <- list(
title = "",
titlefont = f1,
showticklabels = TRUE,
tickangle = 0,
tickfont = f2
)
b <- list(
title = "",
titlefont = f1,
showticklabels = TRUE,
tickangle = 0,
tickfont = f2,
zeroline = TRUE,
showline = TRUE,
mirror = FALSE,
linecolor = toRGB("black"),
linewidth = 1
)
p <- list()
p[[i]] <- plot_ly(data = plotTbl ,
x = ~Var,
y = ~N,
type = 'bar',
marker = list(color = ~colorCodes),
opacity = 0.7,
hoverinfo="text",
text = ~text2display) %>%
layout(xaxis = a, yaxis = b, showlegend = F, margin = list(b = 30))
}