Tạo các biểu đồ con của biểu đồ plot_ly trong R

Aug 21 2020

Tôi có một khung dữ liệu, có thể được tạo theo cách này:

x = data.frame(metrics=c("type1", "type1", "type1", "orders", "orders", "orders", "mean","mean","mean"), hr=c(6,7,8,6,7,8,6,7,8), actual=c(14,20,34,56,12,34,56,78,89))

Tôi đã cố gắng vẽ biểu đồ phân tán bằng cách sử dụng hàm plot_ly. Tôi đã viết một hàm cho nó (tôi cần nó là một hàm):

plot <- function(df){
  

  gp <- df %>%



    plot_ly(
      x = ~ hr,
      y = ~ actual,

      group = ~ metrics,
      hoverinfo = "text",
      hovertemplate = paste(
        "<b>%{text}</b><br>",
        "%{xaxis.title.text}: %{x:+.1f}<br>",
        "%{yaxis.title.text}: %{y:+.1f}<br>",
        "<extra></extra>"
      ),
      type = "scatter",
      mode = "markers",
      marker = list(
        size = 18,
        color = "white",
        line = list(color = "black",
                  width = 1.5)
    ),
      width = 680,
      height = 420
  
)

  gp
}

Tôi nhận được âm mưu này:

Như bạn thấy, cả ba chỉ số đều là một âm mưu. Làm cách nào tôi có thể đặt từng thứ trên biểu đồ riêng biệt bằng cách sử dụng subplot?

Trả lời

1 ismirsehregal Aug 21 2020 at 16:00

Sử dụng, subplotbạn sẽ phải tạo một đối tượng âm mưu riêng biệt cho mỗi biểu đồ. Chúng ta có thể sử dụng một vòng lặp để làm như vậy:

library(plotly)

x = data.frame(
  metrics = rep(c("type1", "orders", "mean"), each = 3),
  hr = c(6, 7, 8, 6, 7, 8, 6, 7, 8),
  actual = c(14, 20, 34, 56, 12, 34, 56, 78, 89)
)


plot <- function(df) {
  subplotList <- list()
  for(metric in unique(df$metrics)){ subplotList[[metric]] <- df[df$metrics == metric,] %>%
      plot_ly(
        x = ~ hr,
        y = ~ actual,
        name = metric,
        hoverinfo = "text",
        hovertemplate = paste(
          "<b>%{text}</b><br>",
          "%{xaxis.title.text}: %{x:+.1f}<br>",
          "%{yaxis.title.text}: %{y:+.1f}<br>",
          "<extra></extra>"
        ),
        type = "scatter",
        mode = "markers",
        marker = list(
          size = 18,
          color = "white",
          line = list(color = "black",
                      width = 1.5)
        ),
        width = 680,
        height = 420
      )
  }
  subplot(subplotList, nrows = length(subplotList), margin = 0.1)
}

plot(x)