R语言 仅平移x轴,仍允许缩放y轴

eivnm1vs  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(114)

环顾四周,我似乎找不到一种方法来禁用拖动y轴在平移模式,同时也允许缩放两个轴。
有人搞清楚了吗?
该数据是位置正整数计数数据,因此我希望保持缩放Y作为具有较大极值的区域的归一化选项。
我检查了r plotly API教程和Github上的问题,我还检查了r plotly和Google的代码。我能找到的就是这个plotly.js的链接,讨论它:https://github.com/plotly/plotly.js/issues/887这是否意味着没有解决方法?

toiithl6

toiithl61#

如果合并识别是平移还是缩放的功能沿着relayout结合使用,就可以创建这种效果。
我创建了一些任意数据来演示这是如何工作的。我使用函数htmlwidgets::onRender添加Plotly事件侦听器。
在我的示例中,我将绘图预设为dragmode“pan”。我还将y轴更改为固定位置。要缩放或更改回平移,您将使用模式栏。
onRender函数为plotly_relayout创建一个事件侦听器。当您在modebar中选择一个项目时,您将导致relayout事件。此外,当您更改y轴是否固定在适当位置时,这也是一个relayout事件。
为了区分这是否是由modebar中的选择触发的relayout事件,我使用了if( ... == "dragmode"
更确切地说:if(evd.includes('dragmode'),其作用类似于R的str_detect()
如果这是modebar触发的事件,则固定范围状态将根据您是平移还是缩放而更改。

library(plotly)

dfp <- data.frame(x = 1:100, y = rep(1:25, 4))

plot_ly(dfp, x = ~x, y = ~y, mode = "lines", type = "scatter") %>% 
  layout(dragmode = "pan", yaxis = list(fixedrange = TRUE)) %>% 
  htmlwidgets::onRender(
    "function(el, x) {
      el.on('plotly_relayout', function(ed) {
        evd = JSON.stringify(ed);
        if(evd.includes('dragmode')) {
          Plotly.relayout(el.id, {'yaxis.fixedrange': evd.includes('pan')});
        }
      })
    }")

字符串
我想指出的是,如果你在缩放后平移,你就把y轴限制在那个时间点显示的任何东西上。要完全重置绘图,您需要在模式栏中选择缩放(即使您不打算使用它),以将y轴更改回 * 不固定 * 范围。


的数据
淘选后:



选择缩放、主页后,选择缩放范围(在图上拖动):

相关问题