Я пытаюсь построить данные батиметрии (из базы данных GEBCO ). Я пытаюсь построить широту, длину и высоту, используя морскую волю python. Данные в формате netCDF. Мне удалось правильно загрузить данные с помощью xarray. Вот фрагмент кода.
from netCDF4 import Dataset
import xarray as xr
ds = Dataset('gebco_2019.nc')
lats = ds.variables['lat'][:]
lons = ds.variables['lon'][:]
tid = ds.variables['tid'][:]
import plotly.graph_objects as go
fig = go.Figure(go.Surface(
contours = {
"x": {"show": True, "size": 0.04, "color":"white"},
"z": {"show": True, "size": 0.05}
},
x = ds.variables['lat'],
y = ds.variables['lon'],
z = [
ds.variables['tid']
]))
fig.show()
попытайтесь построить трехмерный график, используя python, но получите эту ошибку. arrays must all be same length
Мне удалось получить двухмерный график.
Я использовал другой метод, чтобы проверить, есть ли netcdf файл в порядке (преобразовать в CSV ). Я построил график с использованием plotly.
import plotly.graph_objects as go
import pandas as pd
import numpy as np
# Read data from a csv
z_data = pd.read_csv('bathy_bedford.csv')
z = z_data.values
sh_0, sh_1 = z.shape
x, y = np.linspace(44.66875, 44.74791667, sh_0), np.linspace(-63.69791667, -63.52708333, sh_1)
fig = go.Figure(data=[go.Surface(z=z, x=x, y=y)])
fig.update_traces(contours_z=dict(show=True, usecolormap=True,
highlightcolor="limegreen", project_z=True))
fig.update_layout(title='Bedford Basin Elevation',xaxis_title="Latitude",
yaxis_title="Longitude",autosize=False,
width=900, height=900,
margin=dict(l=65, r=50, b=65, t=90))
fig.update_layout(scene = dict(
xaxis_title='Latitude',
yaxis_title='Longitude',
zaxis_title='Elevation'),
margin=dict(r=20, b=10, l=10, t=10))
# fig.update_layout(color='Elevation')
fig.update_layout(coloraxis_colorbar=dict(
title="Elevation",
thicknessmode="pixels", thickness=50,
lenmode="pixels", len=200,
yanchor="top", y=1,
ticks="outside", ticksuffix="",
dtick=5
))
fig.show()
Вот изображение на выходе: