Как построить данные батиметрии GEBCO с python? - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь построить данные батиметрии (из базы данных 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

Мне удалось получить двухмерный график.

Attached

Я использовал другой метод, чтобы проверить, есть ли 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()

Вот изображение на выходе: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...