2016-10-13 6 views
0

я должен создать столбчатую диаграмму в plotly с данными что-то вроде нижеR Plotly несколько измерений на гистограмме

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) 
) 

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

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

спасибо,

Манодж

ответ

0

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

# 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") 

enter image description here

# 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_4.5.2. Построение более двух баров на xaxis работает без проблем. Попробуйте эти данные с тремя 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) 

enter image description here

+0

Спасибо Jimbou, с первым вариантом и с моим реальным данным я каким-то образом получить комбинацию одного бара и двух карт линии. Знаете ли вы, что может быть неправильно? Кроме того, если я использую опцию 2, есть ли способ указать пользовательский цвет для каждой категории Var 2? –

+0

Забыл упомянуть, что мои реальные данные я не могу использовать '~' до моих значений x и y. Я не получаю диаграмму, если я использую тильду перед моими переменными. Я проверил типы данных, и он аналогичен приведенным выше образцам, поэтому не уверен, что происходит. спасибо –

+0

Вы используете самую актуальную версию сюжета? Проверьте это с помощью 'sessionInfo()'. – Jimbou