R Построение нескольких измерений на гистограмме

Мне нужно создать гистограмму с накоплением на графике с данными, как показано ниже

df <- data.frame(
  var1 = c("NY", "NY", "NY", "SFO", "SFO", "SFO"),
  var2 =  c("LOW", "Medium", "High", "Low", "Medium", "High"),
  value = c(10, 15, 20, 15, 20, 15)
)

Обычно на оси x будет 2 полосы для переменной var1, заполненные значениями для каждой переменной var2. В ggplot вы можете использовать var2 в качестве заливки, но я не могу понять, как это сделать в сюжетном режиме.

Кто-нибудь может помочь?

Благодарность,

Манодж


person Manoj Agrawal    schedule 13.10.2016    source источник


Ответы (1)


Ты можешь попробовать:

# Split the data
df_list <- split(df, df$var2)
# plot the data and add the traces for var2
plot_ly(df_list$Low, x=~var1, y=~value, type="bar", name="Low") %>%
  add_trace(y= df_list$Medium$value , name = "Medium") %>%
  add_trace(y= df_list$High$value, name = "High") %>%
  layout(barmode = "stack")

введите описание изображения здесь

# A faster way would be something like this:
# First order var2
df$var2 <- factor(df$var2,levels = c("Low", "Medium", "High"))
# Plot 
plot_ly(df, x= ~var11, y= ~value, color= ~var2, type="bar") %>% layout(barmode = "stack")

Последнее решение неправильно отображает цвета в легенде, что кажется ошибкой в ​​версии plotly plotly_4.5.2. Построение более двух полосок на оси x работает без проблем. Попробуйте эти данные с тремя var1 группами:

df2 <- data.frame(
  var1 = c("NY", "NY", "NY", "SFO", "SFO", "SFO","Test"),
  var2 =  c("Low", "Medium", "High", "Low", "Medium", "High","Low"),
  value = c(10, 15, 20, 15, 20, 15,30)
)
plot_ly(df2, x=~var1, y=~value, color=~var2, type="bar") %>% layout(barmode = "stack")

# Or use ggplot
library(ggplot2)
p <- ggplot(df, aes(x=var1, y=value, fill=var2)) + geom_bar(stat="identity") + theme_bw()
ggplotly(p)

введите описание изображения здесь

person Roman    schedule 14.10.2016
comment
Спасибо, Джимбоу, с первым вариантом и с моими реальными данными я каким-то образом получаю комбинацию из одного столбца и двух линейных диаграмм. Вы бы знали, что может быть не так? Кроме того, если я использую вариант 2, есть ли способ указать собственный цвет для каждой категории Var 2? - person Manoj Agrawal; 14.10.2016
comment
Забыл упомянуть, что мои реальные данные я не могу использовать '~' перед своими значениями x и y. Я не получаю диаграмму, если использую тильду перед переменными. Я проверил типы данных, и они совпадают с приведенными выше образцами данных, поэтому не уверен, что происходит. Благодарность - person Manoj Agrawal; 14.10.2016
comment
Вы используете самую актуальную версию plotly? Проверьте это с помощью sessionInfo(). - person Roman; 17.10.2016