【问题标题】:R, How to change color of plotly 3d surface?R,如何改变 plotly 3d 表面的颜色?
【发布时间】:2018-11-07 11:51:21
【问题描述】:

如何将色阶从默认的紫色更改为黄色?我尝试将颜色和色阶参数添加到 add_trace(),但它会引发错误。

具有默认颜色的可重现代码:

library(plotly); library(reshape2); library(tidyverse)
sleep <- read.table("http://www.statsci.org/data/general/sleep.txt", header=T)
sleep <- na.omit(sleep)
sleep <- mutate(sleep, logTotalSleep = log(TotalSleep))

sleep_mod <- lm(logTotalSleep ~ Gestation + Danger, data=sleep)



# Graph Resolution (more important for more complex shapes)
graph_reso <- 0.5 #0.05

# Setup Axis
axis_x <- seq(min(sleep$Gestation), max(sleep$Gestation), by = graph_reso)
axis_y <- seq(min(sleep$Danger), max(sleep$Danger), by = graph_reso)

# Sample points
sleep_surface <- expand.grid(Gestation = axis_x,
                                 Danger = axis_y,
                                 KEEP.OUT.ATTRS = F)

sleep_surface$TotalSleep <- exp(predict.lm(sleep_mod, newdata = sleep_surface)) # exp to remove ln() from y

sleep_surface <- acast(sleep_surface, Danger ~ Gestation, value.var = "TotalSleep") #y ~ x


# Plot
p <- plot_ly(data = sleep) %>% 
  add_trace(x = ~Gestation, y = ~Danger, z = ~TotalSleep, 
            type = "scatter3d", mode = "markers",
            opacity = .8) %>%
  add_trace(z = sleep_surface,
            x = axis_x,
            y = axis_y,
            type = "surface") %>% 
  layout(scene = list(xaxis = list(title = 'Gestation Period (days)'),
                      yaxis = list(title = 'Danger Index'),
                      zaxis = list(title = 'Hours of Sleep')))
p

【问题讨论】:

    标签: r colors plotly surface


    【解决方案1】:

    您可以定义自己的colorscale 并将其添加到您定义曲面图的add_trace

    colorscale = list(c(0, 1), c("tan", "blue"))
    

    这为您提供以下 raph

    完整代码

    library(plotly)
    library(reshape2)
    
    sleep <- read.table("http://www.statsci.org/data/general/sleep.txt", header=T)
    sleep <- na.omit(sleep)
    sleep <- mutate(sleep, logTotalSleep = log(TotalSleep))
    sleep_mod <- lm(logTotalSleep ~ Gestation + Danger, data=sleep)
    
    graph_reso <- 0.5
    axis_x <- seq(min(sleep$Gestation), max(sleep$Gestation), by = graph_reso)
    axis_y <- seq(min(sleep$Danger), max(sleep$Danger), by = graph_reso)
    
    sleep_surface <- expand.grid(Gestation = axis_x,
                                 Danger = axis_y,
                                 KEEP.OUT.ATTRS = F)
    sleep_surface$TotalSleep <- exp(predict.lm(sleep_mod, newdata = sleep_surface)) # exp to remove ln() from y
    
    sleep_surface <- acast(sleep_surface, Danger ~ Gestation, value.var = "TotalSleep") #y ~ x
    
    p <- plot_ly(data = sleep) %>%
      add_trace(x = ~Gestation, y = ~Danger, z = ~TotalSleep, 
                type = "scatter3d", mode = "markers",
                opacity = .8) %>%
      add_trace(z = sleep_surface,
                x = axis_x,
                y = axis_y,
                type = "surface", colorscale = list(c(0, 1), c("tan", "blue")))
    
    p
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 2019-05-28
      • 2020-11-24
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      相关资源
      最近更新 更多