R plotly subplot 中相同的比例,不同的宽度

问题描述 投票:0回答:1

我想使用

plotly::subplot
和以下代码创建一个背靠背的情节:

library(plotly)

df <- data.frame(x = c("A", "B", "C"), a = c(0.1, 0.2, 0.3), b = c(0.1, 0.2, 0.6))

p1 <- plot_ly(df) %>% 
  add_bars(x = ~a, y = ~x) %>% 
  layout(xaxis = list(tickformat = ".0%", autorange = "reversed"))

p2 <- plot_ly(df) %>% 
  add_bars(x = ~b, y = ~x) %>% 
  layout(xaxis = list(tickformat = ".0%"))

subplot(p1, p2, shareY = TRUE, shareX = TRUE, nrows = 1, margin = 0)

我的问题是左侧 x 轴刻度上的 10% 与右侧的宽度不同。如何解决?

r plotly
1个回答
0
投票

range = list(0.6, 0)
中使用反向范围列表
p1
而不是
autorange
.

library(plotly)

p1 <- plot_ly(df) %>% 
  add_bars(x = ~a, y = ~x) %>% 
  layout(xaxis = list(tickformat = ".0%", range = list(0.6, 0)))

p2 <- plot_ly(df) %>% 
  add_bars(x = ~b, y = ~x) %>% 
  layout(xaxis = list(tickformat = ".0%"))

subplot(p1, p2, shareY = TRUE, shareX = TRUE, nrows = 1, margin = 0)


要缩小

p1
上的x 轴范围,请使用
scaleanchor
。在这种情况下,我们可以将
autorange = "reversed"
保留在
p1
中。但是,
margin = 0
中的
subplot
参数在设置后似乎不起作用。因此,我们可能需要将
margin
操作为负值并设置刻度间隔 (
tickvals
) 以避免在“0%”上重叠标签。

p1 <- plot_ly(df) %>% 
  add_bars(x = ~a, y = ~x) %>% 
  layout(xaxis = list(tickformat = ".0%", autorange = "reversed"))

p2 <- plot_ly(df) %>% 
  add_bars(x = ~b, y = ~x) %>% 
  layout(xaxis = list(tickformat = ".0%"))

subplot(p1, p2, shareY = TRUE, shareX = TRUE, nrows = 1, margin = -0.07) %>% 
  layout(xaxis = list(scaleanchor = "x2"), xaxis2 = list(tickvals = list(0.2, 0.4, 0.6)))

© www.soinside.com 2019 - 2024. All rights reserved.