2017-04-20 7 views
1

plotly積み上げ棒グラフにトレースが1つしかない場合、凡例は表示されません。凡例は棒グラフで表示されません。R内のトレースが1つのみの場合R

私のデータセットは以下の通りである:私はWeekMonthQuarterまたはYearに基づいて、このデータセットをフィルタリング

myDF <- structure(list(Year = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "2017", class = "factor"), 
    Month = c("Mar", "Mar", "Mar", "Apr", "Apr", "Apr"), Date = structure(c(17241, 
    17242, 17242, 17259, 17260, 17261), class = "Date"), Quarter = c("Q1", 
    "Q1", "Q1", "Q2", "Q2", "Q2"), Week = structure(c(2L, 2L, 
    2L, 3L, 3L, 3L), .Label = c("2017-03-05", "2017-03-12", "2017-04-02" 
    ), class = "factor"), NPS = structure(c(NA, NA, NA, 3L, 3L, 
    3L), .Label = c("Detractor", "Passive", "Promoter"), class = "factor")), .Names = c("Year", 
"Month", "Date", "Quarter", "Week", "NPS"), row.names = 7:12, class = "data.frame") 

ユーザ選択を1として。

このためのコードは、これらのいずれかのいずれかです。プロットの

myDF %>% select(one_of(c("Week","NPS"))) -> myDF 
    myDF %>% select(one_of(c("Month","NPS"))) -> myDF 
    myDF %>% select(one_of(c("Quarter","NPS"))) -> myDF 
    myDF %>% select(one_of(c("Year","NPS"))) -> myDF 
    colnames(myDF)[1] <- "Group" 

これは私のコードです:

dcast(na.omit(melt(myDF, id.vars = 'Group')), Group ~ value, fun.aggregate = length) -> tab 
tab 
#  Group Promoter 
#1 2017-04-02   3 


x <- list(
    title = "" 
) 
y <- list(
    title = "Count" 
) 

p <- plot_ly(tab, x = ~Group) 

if ("Detractors" %in% colnames(tab[-1])){ 
    p <- add_trace(p, y = ~`Detractors`, name = 'Detractors', type = 'bar', 
       marker = list(color = '#D52728')) #red 
} 
if ("Passive" %in% colnames(tab[-1])){ 
    p <- add_trace(p, y = ~`Passive`, name = 'Passive', type = 'bar', 
       marker = list(color = '#1F78B4')) #orange 
} 
if ("Promoter" %in% colnames(tab[-1])){ 
    p <- add_trace(p, y = ~`Promoter`, name = 'Promoter', type = 'bar', 
       marker = list(color = '#2BA02D')) #green 
} 
p <- layout(p, xaxis = x, yaxis = y, barmode = 'stack', legend = list(orientation = 'h')) 

p 

これは私が取得プロットです。唯一の1つのトレースがあるので、私は、この場合に任意の伝説が表示されない - Promoter enter image description here

以下のような複数のトレースとデータセットを使用し、同じ手順を実行している場合しかし、私は伝説を取得します。

myDF <- structure(list(Year = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "2017", class = "factor"), 
     Month = c("Mar", "Mar", "Mar", "Apr", "Apr", "Apr"), Date = structure(c(17241, 
     17242, 17242, 17259, 17260, 17261), class = "Date"), Quarter = c("Q1", 
     "Q1", "Q1", "Q2", "Q2", "Q2"), Week = structure(c(2L, 2L, 
     2L, 3L, 3L, 3L), .Label = c("2017-03-05", "2017-03-12", "2017-04-02" 
     ), class = "factor"), NPS = structure(c(NA, NA, NA, 2L, 3L, 
     3L), .Label = c("Detractor", "Passive", "Promoter"), class = "factor")), .Names = c("Year", 
    "Month", "Date", "Quarter", "Week", "NPS"), row.names = 7:12, class = "data.frame") 

enter image description here

唯一のトレースが色を識別するためのデータで利用可能なときに凡例を表示する方法はありますか?

答えて

3

あなたのlayout

plot_ly(x = c(1), 
     y=c(5), 
     type = 'bar', 
     name = 'lonely bar') %>% 
    layout(showlegend=T) 

showlegend=TRUEを追加することができ、それによって伝説がトレース数とは無関係に表示されますことを強制します。

enter image description here

関連する問題