График add_trace в виде гистограммы - PullRequest
0 голосов
/ 05 марта 2019

Я строю столбчатую диаграмму с накоплением в виде графика, и всякий раз, когда я запускаю свой цикл для add_trace, возникает проблема, так как данные предыдущей трассы исчезают, а имена остаются.

        p = plot_ly( x = rownames(dist_data), y = as.numeric(dist_data[,1]), type = 'bar', name = colnames(dist_data)[1])%>%
      layout(legend = list(x = 0.1, y = 0.9))

    for ( j in 2:length(colnames(dist_data)))
    {
      p =  add_trace(p, y = ~as.numeric(dist_data[,j]), type = 'bar',name = colnames(dist_data)[j]) %>%
        layout( barmode = 'stack')
    }
    p

Мне интересноесть ли что-то не так в цикле.При попытке вручную добавить trace1 работает нормально.При добавлении trace 2 (j = 3) значения trace1 автоматически становятся равными значению trace2.

UPD: При использовании dplyr у меня возникают проблемы с некоторыми другими частями моего кода.Есть ли решение без него?

Спасибо за помощь,

1 Ответ

1 голос
/ 05 марта 2019

Вы перезаписываете p на каждой итерации цикла.Попробуйте:

p =  p %>% add_trace(y = ~as.numeric(dist_data[,j]), type = 'bar',name = colnames(dist_data)[j]) %>%
        layout( barmode = 'stack')

2nd Edit: не уверен, почему это происходит.Это работает, если вы преобразуете данные в длинный формат данных, что лучше использовать цикл for:

mtcars %>% 
  mutate(id = rownames(.)) %>%
  gather(key = "variable",value = "value",-id) %>% 
  plot_ly(x = ~id, y=~value, type="bar", color=~variable) %>%
  layout(barmode = "stack")

enter image description here

Редактировать:

dist_data=mtcars
p = plot_ly( x = rownames(dist_data), 
             y = as.numeric(dist_data[,1]), 
             type = 'bar', name = colnames(dist_data)[1]) %>%
  layout(legend = list(x = 0.1, y = 0.9))

for ( j in 2:length(colnames(dist_data))){
  p =  add_trace(p, y = ~as.numeric(dist_data[,j]), 
type = 'bar',name = colnames(dist_data)[j]) %>%
    layout( barmode = 'stack')
}
p
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...