据我所知,没有办法直接在 Plotly 中做到这一点。但你可以设置range https://plot.ly/r/reference/#layout-yaxis-range手动对两个轴进行操作。
对于您的栏,将以下行添加到其布局中:
range = c(max(df$VALUE) / max(df$LINE) * min(df$LINE), max(df$VALUE))
对于你的台词:
range = c(min(df$LINE), max(df$LINE))
which would give the followin graph.
一种更简单的方法是将下限设置为 0,这会截断折线图。
在下面的代码中添加一个变量axis_buffer
添加是为了避免该范围恰好是您的值的下限和上限。
为了视觉清晰度,我会删除一些网格线或尝试标准化您的数据并将原始数据添加到您的悬停信息中。
library('plotly')
df <- data.frame(
DEP = c("ABC", "DEF", "GHI")
, VALUE = c(100, 110, 120)
, LINE = c(-0.1, 0.7, 0.9)
)
axis_buffer <- 1.1
xAxis <- list(
title = ""
, tickangle = 0
, tickfont = list(size = 10)
)
yAxis <- list(
side = "left"
, showgrid = TRUE
, zeroline = TRUE
, title = ""
, range = c(max(df$VALUE) / max(df$LINE) * min(df$LINE) * axis_buffer, max(df$VALUE) * axis_buffer)
)
yAxis2 <- list(
side = "right"
, autotick = FALSE
, ticks = "outside"
, tick0 = 0
, dtick = 0.1
, showgrid = TRUE
, zeroline = TRUE
, overlaying = "y"
, range = c(min(df$LINE) * axis_buffer, max(df$LINE) * axis_buffer)
)
plot_ly(data = df, x = ~DEP) %>%
add_trace(data = df, x = ~DEP, y = ~VALUE, name = 'VALUE', type = "bar", yaxis = "y", textposition = "auto") %>%
add_trace(data = df, x = ~DEP, y = ~LINE, name = 'LINE', mode = "lines", type = "scatter",
line = list(width = 4), yaxis = "y2") %>%
layout(
margin = list(r=50, b = 150)
, xaxis = xAxis
, yaxis = yAxis
, yaxis2 = yAxis2
, showlegend = FALSE
)