ggplotly堆积条形图在过滤后不调整大小

Posted

技术标签:

【中文标题】ggplotly堆积条形图在过滤后不调整大小【英文标题】:ggplotly stacked bar chart not resizing after filtering 【发布时间】:2021-12-26 22:38:17 【问题描述】:

由于某种原因,在使用 ggplotly 函数生成绘图时,过滤似乎不会调整 y 轴的大小。过滤的部分被简单地删除,而 yaxis 保持其原始长度。请看这个例子:

library(plotly)
library(ggplot2)
library(dplyr)

lab <- paste("Vertical Label", c(1, 2, 3, 4, 5))

ds <- data.frame(x = sample(lab, size = 1000, replace = T),
                 y = sample(LETTERS[1:5], size = 1000, replace = T)) %>%
      group_by(x,y) %>% summarise(count= n())

ggplotly(
ggplot(ds, aes(x = x,y=count, fill = y)) +
  geom_col() +
  theme(axis.text.x = element_text(angle = 90)) 
)

plot_ly 函数的方法相同。但是,我需要与 ggploty 类似的结果

plot_ly(ds, x = ~x, y = ~count, type = 'bar', color = ~y
        ) %>% layout(title = "Vertical Axis Lables",
                      xaxis = list(title = ""),
                      yaxis = list(title = ""), barmode = 'stack')

我在堆栈溢出或谷歌中找不到任何有用的东西。刚刚在这里遇到了一个不完整的答案: https://community.rstudio.com/t/ggplotly-bar-chart-not-resizing-after-filtering/115675/3

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

应用来自R Plotly Legend Filtering 的提示可实现重新堆叠和类似的排序,同时启用自动缩放可提供 y 轴适应:

library(plotly)
library(ggplot2)
library(dplyr)

lab <- paste("Vertical Label", c(1, 2, 3, 4, 5))

ds <- data.frame(x = sample(lab, size = 1000, replace = T),
             y = sample(LETTERS[1:5], size = 1000, replace = T)) %>%
             group_by(x,y) %>% summarise(count= n())

p <- ggplotly(
  ggplot(ds, aes(x = x,y=count, fill = y)) +
    geom_col() +
    theme(axis.text.x = element_text(angle = 90)) 
)
for (i in 1:length(p$x$data)) 
  p$x$data[[i]]$base <- c()
  tmp <- p$x$data[[i]]
  p$x$data[[i]] <- p$x$data[[length(p$x$data) - i + 1]]
  p$x$data[[length(p$x$data) - i + 1]] <- tmp

p

【讨论】:

哇,我怎么没看到那个帖子,感谢您的分享并感谢您的回答! 令人遗憾的是,y 轴也没有调整大小。哦,好吧,得失去一些东西。 如果启用了右上角的自动缩放绘图控件,y 轴会为我调整大小。 抱歉回复晚了(我的帐户被锁定了)。感谢您的澄清:)

以上是关于ggplotly堆积条形图在过滤后不调整大小的主要内容,如果未能解决你的问题,请参考以下文章

自动调整 ggplot 中条形图的大小,以实现多个图形 R 的一致性

使D3堆积条形图填充父SVG容器

在闪亮仪表板的选项卡面板中调整ggplot条形图的高度

使用 ggplot2 制作堆积条形图

你如何为ggplot中的条形图在x轴上做范围?

ggplot2:3路交互堆积条形图的分组条形图