【问题标题】:Prevent R `plotly` plot axes from being resized after hiding a group of points防止在隐藏一组点后调整 R `plotly` 绘图轴的大小
【发布时间】:2019-01-04 23:17:17
【问题描述】:

我使用 R 包 plotly 来创建 3D 散点图。我想比较隐藏一个或多个组时情节的外观。当我通过单击图例“关闭”(隐藏)其中一个组时,如何防止轴被驻留?

library(plotly)

# Data
set.seed(20180727)
my_data <- 
    data.frame(x = c(rnorm(20, mean = 0), rnorm(20, mean = 0),  rnorm(20, mean = 2)),
               y = c(rnorm(20, mean = 0), rnorm(20, mean = -5), rnorm(20, mean = 8)),
               z = c(rnorm(20, mean = 0), rnorm(20, mean = 8),  rnorm(20, mean = 4)),
               group = gl(3, 20, labels = c("A", "B", "C"))
    )


# Plotly settings
scene0 <- list(xaxis = list(range = range(my_data$x), autorange = FALSE),
               yaxis = list(range = range(my_data$y), autorange = FALSE),
               zaxis = list(range = range(my_data$z), autorange = FALSE))

# Plot
plot_ly(my_data,
        x = ~x, y = ~y, z = ~z,
        color     = ~group,
        type      = "scatter3d",
        mode      = "markers",
        marker    = list(opacity = 0.6, size = 4)
) %>%
    plotly::layout(scene = scene0)

所有组:

一组被隐藏,不幸的是,坐标轴被调整了大小:

【问题讨论】:

  • 您可以将它们的颜色改为“透明”或将不透明度改为零吗?

标签: r r-plotly


【解决方案1】:

诡计

library(plotly)
library(dplyr)
# Data
set.seed(20180727)
my_data <- 
  data.frame(x = c(rnorm(20, mean = 0), rnorm(20, mean = 0),  rnorm(20, mean = 2)),
         y = c(rnorm(20, mean = 0), rnorm(20, mean = -5), rnorm(20, mean = 8)),
         z = c(rnorm(20, mean = 0), rnorm(20, mean = 8),  rnorm(20, mean = 4)),
         group = gl(3, 20, labels = c("A", "B", "C"))
  )

rangex = range(my_data$x)
rangey = range(my_data$y)
rangez = range(my_data$z)

# Plot
plot_ly(my_data,
        x = ~x, y = ~y, z = ~z,
        color     = ~group,
        type      = "scatter3d",
        mode      = "markers",
        marker    = list(opacity = 0.6, size = 4)
) %>%
  add_trace(y = rangey[2],x=rangex[2],z=rangez[2],type      = "scatter3d",showlegend = FALSE,opacity=0) %>%
  add_trace(y = rangey[1],x=rangex[1],z=rangez[1],type      = "scatter3d",showlegend = FALSE,opacity=0)

【讨论】:

    【解决方案2】:

    我也遇到了这个问题,通过在布局的“场景”参数中手动指定“纵横比”解决了这个问题。设置任何你想要的比例,这里是 1:1:1.2。您可以将其附加到您当前的场景参数中。

    试试:

    noresize_scene = list(aspectmode='manual',
      aspectratio = list(x=1, y=1, z=1.2))
    
    plot_ly(my_data,
            x = ~x, y = ~y, z = ~z,
            color     = ~group,
            type      = "scatter3d",
            mode      = "markers",
            marker    = list(opacity = 0.6, size = 4)
    ) %>%
        plotly::layout(scene = noresize_scene)
    

    【讨论】:

      猜你喜欢
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 2021-06-08
      • 1970-01-01
      • 2019-02-13
      • 2018-01-17
      相关资源
      最近更新 更多