【问题标题】:R ggplotly() and colour annotations - How do you do it?R ggplotly() 和颜色注释 - 你是怎么做的?
【发布时间】:2020-04-03 10:42:05
【问题描述】:

我正在尝试使用带有悬停点的 Plotly 的附加功能从 ggplot 复制绘图,但它会剥离注释并尝试一切以实现相同的视图但没有成功。

library("ggplot2")
library("plotly")
test_data <- data.frame(A = c(1,5,7,4,2),
                        B = c(3,3,6,8,4))

my_days <- as.Date(c("2010-01-01", "2010-02-01",
                      "2010-03-01", "2010- 4-01",
                      "2010-05-01"))

df <- data.frame(test_data, my_days)

# Anotate Box
s_1 <- unique(min(df$my_days))
s_2 <- unique(max(df$my_days))

target <- 1

plot_out <- df %>% 
  group_by(my_days) %>% 
  summarise(prop = sum(A / B)) %>% 
  ggplot(aes(x =my_days, y = prop)) +
  geom_line(color = "purple") + 
  annotate("rect", xmin = s_1, xmax = s_2, ymin = -Inf, ymax = target, alpha = .2, fill = "red") +
  annotate("rect", xmin = s_1, xmax = s_2, ymin = target, ymax = Inf, alpha = .2, fill = "green")

plot_out # Plot with Colour 

ggplotly(plot_out) # This gives the hover info points , but removes the annotates 

【问题讨论】:

    标签: r ggplot2 r-plotly ggplotly annotate


    【解决方案1】:

    不是ggplotly 解决方案,而是plotly 解决方案。 (; 至少在我看来ggplotly 是不错的,如果你想制作一个 ggplot 的快速交互版本。但是,ggplotly 仍然有很多问题并且无法转换每个 ggplot。试试这个:

    library("ggplot2")
    library("plotly")
    
    test_data <- data.frame(
      A = c(1, 5, 7, 4, 2),
      B = c(3, 3, 6, 8, 4)
    )
    
    my_days <- as.Date(c(
      "2010-01-01", "2010-02-01",
      "2010-03-01", "2010- 4-01",
      "2010-05-01"
    ))
    
    df <- data.frame(test_data, my_days)
    
    # Anotate Box
    s_1 <- unique(min(df$my_days))
    s_2 <- unique(max(df$my_days))
    
    target <- 1
    
    p <- df %>%
      group_by(my_days) %>%
      summarise(prop = sum(A / B)) %>%
      plot_ly(x = ~my_days, y = ~prop) %>%
      add_lines(
        line = list(color = "purple"), 
        hoverinfo = "text", 
        text = ~ paste0(
          "mydays: ", my_days,
          "\n", "prop: ", round(prop, 7)
      )) %>%
      # Add the rectangles and set x-axis as in ggplot
      layout(
        xaxis = list(
          type = "date",
          tickformat = "%b",
          nticks = 5
        ),
        shapes = list(
          list(
            type = "rect",
            fillcolor = "red", opacity = 0.2,
            x0 = s_1, x1 = s_2, xref = "x",
            y0 = -Inf, y1 = target, yref = "y"
          ),
          list(
            type = "rect",
            fillcolor = "green", opacity = 0.2,
            x0 = s_1, x1 = s_2, xref = "x",
            # Setting y1 to Inf results in a yaxis which spans up to 2.5. So I chose 1.8 to mimic the ggplot
            y0 = target, y1 = 1.8, yref = "y"
          )
        )
      )
    p
    

    reprex package (v0.3.0) 于 2020-04-05 创建

    【讨论】:

      猜你喜欢
      • 2020-08-13
      • 2021-01-16
      • 2010-09-11
      • 1970-01-01
      • 2011-12-31
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多