13.4 双轴图

双轴图

模拟一组数据

set.seed(2020)
dat <- data.frame(
  dt = seq(from = as.Date("2020-01-01"), to = as.Date("2020-01-31"), by = "day"),
  search_qv = sample(100000:1000000, size = 31, replace = T)
) %>%
  transform(valid_click_qv = sapply(search_qv, rbinom, n = 1, prob = 0.5)) %>%
  transform(qv_ctr = valid_click_qv / search_qv)

hoverinfo = "text" 表示 tooltips 使用指定的 text 映射,而 visible = "legendonly" 表示图层默认隐藏不展示,只在图例里显示,有时候很多条线,默认只是展示几条而已。举例如下

plot_ly(data = dat) %>%
  add_bars(
    x = ~dt, y = ~search_qv, color = I("gray80"), name = "搜索 QV",
    text = ~ paste0(
      "日期:", dt, "<br>",
      "点击 QV:", format(valid_click_qv, big.mark = ","), "<br>",
      "搜索 QV:", format(search_qv, big.mark = ","), "<br>",
      "QV_CTR:", scales::percent(qv_ctr, accuracy = 0.01), "<br>"
    ),
    hoverinfo = "text"
  ) %>%
  add_bars(
    x = ~dt, y = ~valid_click_qv, color = I("gray60"), name = "点击 QV",
    text = ~ paste0(
      "日期:", dt, "<br>",
      "点击 QV:", format(valid_click_qv, big.mark = ","), "<br>",
      "搜索 QV:", format(search_qv, big.mark = ","), "<br>",
      "QV_CTR:", scales::percent(qv_ctr, accuracy = 0.01), "<br>"
    ), visible = "legendonly",
    hoverinfo = "text"
  ) %>%
  add_lines(
    x = ~dt, y = ~qv_ctr, name = "QV_CTR", yaxis = "y2", color = I("gray40"),
    text = ~ paste("QV_CTR:", scales::percent(qv_ctr, accuracy = 0.01), "<br>"), 
    hoverinfo = "text",
    line = list(shape = "spline", width = 3, dash = "line")
  ) %>%
  layout(
    title = "",
    yaxis2 = list(
      tickfont = list(color = "black"),
      overlaying = "y",
      side = "right",
      title = "QV_CTR(%)",
      # ticksuffix = "%", # 设置坐标轴单位
      tickformat = '.1%', # 设置坐标轴刻度
      showgrid = F, automargin = TRUE
    ),
    xaxis = list(title = "日期", showgrid = F, showline = F),
    yaxis = list(title = " ", showgrid = F, showline = F),
    margin = list(r = 20, autoexpand = T),
    legend = list(
      x = 0, y = 1, orientation = "h",
      title = list(text = " ")
    )
  )
日期:2020-01-01点击 QV:423,409搜索 QV:846,731QV_CTR:50.01%日期:2020-01-02点击 QV:262,557搜索 QV:524,469QV_CTR:50.06%日期:2020-01-03点击 QV:281,850搜索 QV:563,168QV_CTR:50.05%日期:2020-01-04点击 QV: 62,949搜索 QV:125,763QV_CTR:50.05%日期:2020-01-05点击 QV:364,881搜索 QV:730,469QV_CTR:49.95%日期:2020-01-06点击 QV: 74,379搜索 QV:148,748QV_CTR:50.00%日期:2020-01-07点击 QV:297,342搜索 QV:594,121QV_CTR:50.05%日期:2020-01-08点击 QV:104,158搜索 QV:208,367QV_CTR:49.99%日期:2020-01-09点击 QV:222,510搜索 QV:445,116QV_CTR:49.99%日期:2020-01-10点击 QV: 85,331搜索 QV:170,639QV_CTR:50.01%日期:2020-01-11点击 QV:146,224搜索 QV:292,833QV_CTR:49.93%日期:2020-01-12点击 QV:449,161搜索 QV:897,303QV_CTR:50.06%日期:2020-01-13点击 QV:304,598搜索 QV:607,779QV_CTR:50.12%日期:2020-01-14点击 QV:101,220搜索 QV:201,965QV_CTR:50.12%日期:2020-01-15点击 QV:478,644搜索 QV:956,651QV_CTR:50.03%日期:2020-01-16点击 QV:488,052搜索 QV:976,038QV_CTR:50.00%日期:2020-01-17点击 QV:179,015搜索 QV:357,809QV_CTR:50.03%日期:2020-01-18点击 QV:155,650搜索 QV:311,156QV_CTR:50.02%日期:2020-01-19点击 QV:155,616搜索 QV:311,375QV_CTR:49.98%日期:2020-01-20点击 QV:440,153搜索 QV:878,874QV_CTR:50.08%日期:2020-01-21点击 QV:232,298搜索 QV:465,137QV_CTR:49.94%日期:2020-01-22点击 QV:367,607搜索 QV:735,742QV_CTR:49.96%日期:2020-01-23点击 QV:219,208搜索 QV:438,542QV_CTR:49.99%日期:2020-01-24点击 QV:387,543搜索 QV:774,252QV_CTR:50.05%日期:2020-01-25点击 QV:279,410搜索 QV:558,892QV_CTR:49.99%日期:2020-01-26点击 QV: 98,287搜索 QV:197,374QV_CTR:49.80%日期:2020-01-27点击 QV: 63,807搜索 QV:127,813QV_CTR:49.92%日期:2020-01-28点击 QV:135,837搜索 QV:271,292QV_CTR:50.07%日期:2020-01-29点击 QV:330,742搜索 QV:662,092QV_CTR:49.95%日期:2020-01-30点击 QV:383,481搜索 QV:766,328QV_CTR:50.04%日期:2020-01-31点击 QV:210,202搜索 QV:420,106QV_CTR:50.04%Jan 52020Jan 12Jan 19Jan 2600.2M0.4M0.6M0.8M1M49.8%49.9%49.9%50.0%50.0%50.0%50.1%
搜索 QV点击 QVQV_CTR日期QV_CTR(%)

图 13.4: 双轴图