gpt4 book ai didi

r - 带有 R 和 Lattice 的 XYZ 图中高程数据的颜色渐变

转载 作者:行者123 更新时间:2023-12-01 00:48:46 26 4
gpt4 key购买 nike

我有一堆 XYZ 数据,其中 X 和 Y 是坐标,Z 应该是高程(LiDAR 点)。我试图用基于 Z 值的梯度绘制这个点云。

这是我到目前为止所拥有的:

# Read the CSV file with the LiDAR point cloud (which was conveniently converted to CSV)
myData <- read.csv("./52I212_plot10.las.csv")
# We don't need all attributes, let's keep only X, Y and Z.
myData <- subset(myData, select=c(X,Y,Z))
# We want a normalized version of Z (between 0 and 1)
myData$normalZ <- (myData$Z-min(myData$Z))/(max(myData$Z)-min(myData$Z))
str(myData)

有了这个,我尝试用
library(lattice)
ramp <- colorRampPalette(c("lightblue", "red"))
cloud(myData$Z ~ myData$X + myData$Y, xlab="X", ylab="Y", zlab="Z",pch=20,
col.point=ramp(10)[myData$normalZ*10])

我希望 Z 值具有介于浅蓝色和红色之间的十种可能颜色之一。
XYZ plot, different colors

当我将绘图命令更改为
cloud(myData$Z ~ myData$X + myData$Y, xlab="X", ylab="Y", zlab="Z",pch=20,
col.point=gray(myData$normalZ))

我得到了更接近我需要的东西:

Much better!

我怀疑我在色带上做错了什么,但无法弄清楚是什么。

提前致谢

拉斐尔

编辑

这个问题: How to match vector values with colours from a colour ramp in R?帮了我很多,但我仍然不明白我做错了什么。此代码有效:
myData$normalZ <- (myData$Z-min(myData$Z))/(max(myData$Z)-min(myData$Z))
ramp <- colorRamp(c("lightblue", "red"))
cols <- ramp(myData$normalZ)
cloud(myData$Z ~ myData$X + myData$Y, xlab="X", ylab="Y", zlab="Z",pch=20,
col.point=rgb(cols,maxColorValue = 256))

Aha!

请指出可以对原始代码进行哪些更改以使其工作 - 我无法弄清楚为什么在第一个图中颜色似乎是随机的。

谢谢
拉斐尔

最佳答案

没有数据无法确认,但我认为 0 会让你失望。您的 normalZ介于 0 和 1 之间,所以 10 * normalZ介于 0 和 10 之间。您将这些非整数传递给 [他们被四舍五入。 (我不得不查一下,但是从 ?"[" :“[i] 的数值被 as.integer 强制转换为整数(因此被截断为零)”。

捐赠 0 (或任何小于 1 的值)作为子集索引与您的颜色向量的长度以及因此如何匹配:

ramp(10)[c(0, 0.4, 0.8, 1.2, 1.6)]
# [1] "#ACD8E5" "#ACD8E5"

然后太短的向量被回收。所以,你的代码可能会与
col.point = ramp(10)[ceiling(myData$normalZ * 10)]

关于r - 带有 R 和 Lattice 的 XYZ 图中高程数据的颜色渐变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32597134/

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