如何使用 R、ggplot 和 plotly 在堆叠条形图的线性和对数刻度之间切换?

How to toggle between linear and logrithmic scale for a stacked bar chart using R, ggplot and plotly?

我想为用户提供在堆叠条形图的线性和对数刻度之间切换的选项。我找到了折线图的示例,我试图重新调整它的用途,但无法更改它以满足我对堆叠条形图的要求。

示例数据如下:

    Vcc_cost <-  c("Health", "risk", "herd")
    Procurement_cost <- c(108898.3, 6847515.7, 171187893.0)
    Delivery_cost <- c(27224.58, 1711878.93, 42796973.25)

    sample_data <- data.frame(Vcc_cost, Procurement_cost , Delivery_cost)

以下是我尝试绘制它的方式:

fig <- plot_ly(sample_data, type = 'bar') %>% 
  add_trace(x=~Vcc_cost, y=~Procurement_cost,  name = "Procurement Cost") %>% 
  add_trace(x=~Vcc_cost, y=~Delivery_cost, name="Delivery cost", visible = F)

fig <- fig %>%  layout(barmode = 'stack',
                       updatemenus = list(list(
                         active = 0,
                         buttons= list(
                           list(label = 'linear',
                                method = 'update',
                                args = list(list(visible = c(T,F)), list(yaxis = list(type ='linear')))),
                           list(label = 'log',
                                method = 'update', 
                                args = list(list(visible = c(F,T)), list(yaxis = list(type ='log'))))))))

然而,线性下拉菜单给出了“交付成本”,日志下拉菜单给出了“采购成本”。但是,我想要获得堆叠条,其中只有 y 轴从线性刻度变为对数刻度(基于下拉列表 selection)。 我发现以下 link 关于如何在折线图的对数和线性比例之间切换的内容,我尝试使用它,但无法获得我想要的结果:

我附上了 select 不同下拉列表时得到的结果图片:

When i select "Linear" scale:

When i select "log" scale:

如果有人能指导我正确的方向,我将不胜感激。谢谢。

尝试将 visible = c(T,F) 和 visible = c(F,T) 都更改为 visible = c(T,T) 看看是否有帮助!