R 单个3D图中的混合面和散射图
我正在研究鲸鱼在特定海底结构周围的分布模式。我正在尝试创建一个交互式3D绘图,同时显示:R 单个3D图中的混合面和散射图,r,gis,plotly,surface,R,Gis,Plotly,Surface,我正在研究鲸鱼在特定海底结构周围的分布模式。我正在尝试创建一个交互式3D绘图,同时显示: 作为表面的测深(x=经度,y=纬度,z=深度),以及 鲸鱼群的地理位置(x=经度,y=纬度,z=固定深度-例如30米) 坐标在UTM坐标系中投影 我通常使用R和ggplot2软件包生成图形。在这里,plotly包似乎是一个不错的选择 我从一个测深光栅和一个点的data.frame开始 > bathy_ras class : RasterLayer dimensions : 784, 8
x
=经度,y
=纬度,z
=深度),以及x
=经度,y
=纬度,z
=固定深度-例如30米)李>
坐标在UTM坐标系中投影
我通常使用R和ggplot2
软件包生成图形。在这里,plotly
包似乎是一个不错的选择
我从一个测深光栅和一个点的data.frame开始
> bathy_ras
class : RasterLayer
dimensions : 784, 821, 643664 (nrow, ncol, ncell)
resolution : 102, 111 (x, y)
extent : 755070, 838812, -2612148, -2525124 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=58S +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
data source : in memory
names : bathymetry
values : -1949.42, -34.27859 (min, max)
> str(points)
'data.frame': 214 obs. of 3 variables:
$ x: num 774264 777293 775476 773430 773284 ...
$ y: num -2534165 -2533556 -2531012 -2532904 -2533695 ...
$ z: num -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 ...
我找不到将两个数据集合并到同一个图形/同一个轴上的方法。我尝试了两种方法,但没有一种能提供我想要的输出
1) 使用plotly软件包在Rstudio中创建绘图
#将光栅转换为测深值矩阵
bathy_矩阵str(bathy_矩阵)
数字[1:784,1:821]-362-365-367-369-371。。。
#创建交互式绘图
p我相信你所做的应该很好。我想这可能和你的x和y坐标有关。曲面图使用1:ncol(bathy_矩阵)
作为x轴,使用1:row(bathy_矩阵)
作为y轴点(如果愿意,请勾选)
您的点需要在该范围内具有x和y坐标,才能显示在曲面图中。下面是一个简单的例子
set.seed(123)
x = sample(1:ncol(volcano), size = 50)
y = sample(1:nrow(volcano), size = 50)
z = c()
for(i in 1:50) {z <- c(z, volcano[y[i], x[i]])}
df <- data.frame(x, y, z)
plot_ly(z = volcano, type = "surface") %>%
add_trace(data = df, x = x, y = y, z = z, mode = "markers", type = "scatter3d",
marker = list(size = 5, color = "red", symbol = 104))
set.seed(123)
x=样品(1:ncol(火山),尺寸=50)
y=样品(1:nrow(火山),尺寸=50)
z=c()
对于(我在1:50中){z感谢alistaire,这确实非常有用。我的点的坐标不在我的矩阵范围内,这就是为什么它们没有显示在绘图上。我必须将这些坐标(最初以UTM lat/long,Xrange=[755100:838800]
,Yrange=[-261200,-2525000]
)重新缩放到我矩阵的大小(Xrange=[1:ncol(bathy_矩阵)]
,Yrange=[1:nrow(bathy_矩阵)]
)在使用plot_-ly之前,然后开始工作。
#convert raster into a dataframe
bathy_df <- as.data.frame(coordinates(bathy_ras))
bathy_df$z <- values(bathy_ras)
> str(bathy_df)
'data.frame': 643664 obs. of 3 variables:
$ x: num 755121 755223 755325 755427 755529 ...
$ y: num -2525179 -2525179 -2525179 -2525179 -2525179 ...
$ z: num -362 -361 -360 -359 -358 ...
set.seed(123)
x = sample(1:ncol(volcano), size = 50)
y = sample(1:nrow(volcano), size = 50)
z = c()
for(i in 1:50) {z <- c(z, volcano[y[i], x[i]])}
df <- data.frame(x, y, z)
plot_ly(z = volcano, type = "surface") %>%
add_trace(data = df, x = x, y = y, z = z, mode = "markers", type = "scatter3d",
marker = list(size = 5, color = "red", symbol = 104))