Как сделать так, чтобы столбцы ошибок соответствовали данным в R Plotly - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь отобразить гистограмму с ошибками. Когда я добавляю цветовую переменную, полосы ошибок отображаются на неправильных полосах.

df <- data_frame(label = c("Step 1", "Step 2", "Step 3", "Step 4"), 
             Action = c("DISPENSE", "WAIT", "DISPENSE", "WAIT" ), 
             Avg = c(1.65, 3.88, 1.19, 23.09),
             StdDev = c(0.80, 7.54, 0.11, 14.63)) 

p1 <- plot_ly(df, type = "bar", orientation = 'h', 
    y = ~label, x = ~Avg, color = ~Action,
    error_x = list(type = "data", array = ~StdDev, color = "#000000"),
    text = ~paste0(Avg," (+/- ",StdDev,")"), hoverinfo = "text")

p2 <- plot_ly(df, type = "bar", orientation = 'h', 
    y = ~label, x = ~Avg,
    error_x = list(type = "data", array = ~StdDev, color = "#000000"),
    text = ~paste0(Avg," (+/- ",StdDev,")"), hoverinfo = "text")

subplot(p1, p2, nrows=2)

это вывод сюжета:

Plot output image

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

Я пробовал различные формы для параметров error_x, но безуспешно:

error_x = ~list(type = "data", array = StdDev, color = "#000000")
error_x = ~list(type = "array", array = StdDev, color = "#000000")
error_x = list(type = "array", array = ~StdDev, color = "#000000")

Я подозреваю, что это похоже на эту проблему , или они оба вызваны одной и той же ошибкой. Я не смог реализовать их решения.

1 Ответ

0 голосов
/ 31 августа 2018

Передача массива в color вызывает больше изменений, чем просто цветные полосы, а также разбивает данные на несколько трасс.

Если вам нужны оба цвета и разные трассы, я не вижу другого решения, кроме создания трасс вручную.

На первом графике цвета назначаются вручную, на втором графике для каждого уникального значения Action создается новая трасса.

library(tibble)
library(plyr)
library(plotly)

df <- data_frame(label = c("Step 1", "Step 2", "Step 3", "Step 4"), 
                 Action = c("DISPENSE", "WAIT", "DISPENSE", "WAIT" ), 
                 Avg = c(1.65, 3.88, 1.19, 23.09),
                 StdDev = c(0.80, 7.54, 0.11, 14.63)) 

color_choices <- list("#8DA0CB", "#59C5A3")
colors <- mapvalues(df$Action, unique(df$Action), color_choices)
p1 <- plot_ly(df, type = "bar", orientation = 'h', 
              y = ~label, x = ~Avg,
              error_x = list(type = "data", array = ~StdDev),
              text = ~paste0(Avg," (+/- ",StdDev,")"), hoverinfo = "text",
              marker = list(color = colors))

p2 <- plot_ly()
names(color_choices) <- unique(df$Action)

for (action in unique(df$Action))
{
  df_filtered <- filter(df, Action == action)
  p2 <- plotly::add_bars(p2, orientation = 'h',
                         y = df_filtered$label, x = df_filtered$Avg,
                         error_x = list(type = "data", array = df_filtered$StdDev), 
                         text = ~paste0(df_filtered$Avg," (+/- ", df_filtered$StdDev, ")"),
                         color = color_choices[action][[1]],
                         hoverinfo = "text",
                         name = action)

}
subplot(p1, p2, nrows=2)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...