gpt4 book ai didi

r - 在绘图表面上使用条件着色

转载 作者:行者123 更新时间:2023-12-01 13:36:22 25 4
gpt4 key购买 nike

我第一次通过 R 使用 plotly 并尝试从网格创建一个表面并根据计算为它着色。

例如,我想使用来自 data(volcano) 的表面,如

library(plotly)
plot_ly(z = ~volcano) %>% add_surface()

enter image description here

但是,不是基于 z 值(高度)的颜色,而是说我想根据离我家在 (20,60) 处的小台面上的距离来着色。
house_loc <- c(20,60,150) # (x,y,z) of my house
dist_to_house <- Vectorize(function(x,y,z){sqrt(sum( (c(x,y,z)-house_loc)^2 ))})

到目前为止,我已经尝试过:
color_me <-function(x){
colorRampPalette(c('tan','blue')
)(24L)[findInterval(x,seq(0,1,length.out=25),
all.inside=TRUE)]
}

library(dplyr)
library(reshape2)
volcano %>%
melt( varnames=c('y','x'),value.name='z' ) %>%
mutate( d = dist_to_house(x, y, z) ,
d_rel = d/max(d),
d_color = color_me(d_rel)
) -> df

plot_ly(df,
type='scatter3d',
mode='none', # no markers, just surface
x=~x,
y=~y,
z=~z,
surfaceaxis=2,
surfacecolor=~d_color) # last argument seems not to work

刚刚返回:

enter image description here

预期的结果是将房屋区域的景观染成棕褐色,并在远离房屋的区域逐渐褪色为蓝色。

有点 related question用途 mesh3d在别处找到的代码并没有解释如何计算 (i, j, k)

最佳答案

您的代码几乎拥有您需要的一切,只需使用 surface绘制并使用距离数组作为 color .

library(plotly)
library(dplyr)
library(reshape2)

house_loc <- c(20,60,150)
dist_to_house <- Vectorize(function(x,y,z){sqrt(sum( (c(x,y,z)-house_loc)^2 ))})

volcano %>%
melt( varnames=c('y','x'),value.name='z' ) %>%
mutate( d = dist_to_house(x, y, z) ,
d_rel = d/max(d)
) -> df

color <- df$d_rel
dim(color) <- dim(volcano)

plot_ly(df,
type='surface',
z=volcano,
surfacecolor=color,
colors=c('tan','blue'))

enter image description here

关于r - 在绘图表面上使用条件着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42963243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com