对于您的栏,将以下行添加到其布局中:range = c(max(df$VALUE) / max(df$LINE) * min(df$LINE), max(df$VALUE))和您的台词:range = c(min(df$LINE), max(df$LINE))这将给出以下图形.一种更简单的方法是将下限设置为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.1xAxis <- 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 )This graph is generated with the following code:library(tidyverse)library(plotly)df <- data.frame( DEP = c("ABC", "DEF", "GHI") , VALUE = c(100, 110, 120) , LINE = c(-0.1, 0.7, 0.9) )xAxis <- list( title = "" , tickangle = 0 , tickfont = list(size = 10))yAxis <- list( side = "left" , showgrid = TRUE , zeroline = TRUE , title = "")yAxis2 <- list( side = "right" , autotick = FALSE , ticks = "outside" , tick0 = 0 , dtick = 0.1 , showgrid = TRUE , zeroline = TRUE , overlaying = "y")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 ) 解决方案 As far as I know there is no way of directly doing it in Plotly. But you could set the range for both axes manually.For your bars add the following line to its layout:range = c(max(df$VALUE) / max(df$LINE) * min(df$LINE), max(df$VALUE))and for your lines:range = c(min(df$LINE), max(df$LINE))which would give the followin graph.An easier approach would be to set the lower limit to 0 which truncates the line graph.In the code below an additional variable axis_buffer was added to avoid that the range is exactly the lower and upper limit of your values.For the sake of visual clarity I would remove some of the grid lines or try normalizing your data and adding the raw data to your hover info.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.1xAxis <- 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 ) 这篇关于一条零线对应两个y轴的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-23 05:42