Визуализация рельефа местности и глубины воды на одном участке - PullRequest
0 голосов
/ 12 января 2020

Я хотел бы получить несколько советов о том, как правильно визуализировать / построить два двумерных массива одинаковой формы, например, ground_arr и water_arr. ground_arr представляет высоту некоторой поверхности, а water_arr представляет высоту / глубину воды на поверхности этой поверхности. Общая высота тогда составляет c ground_arr + water_arr.

Сейчас я использую plt.imshow (water_arr, cmap = ...), чтобы увидеть только воду, и plt.imshow (water_arr + ground_arr), чтобы увидеть общую высоту, но я хотел бы объединить их в тот же сюжет, чтобы получить карту, похожую на сюжет.

Есть советы?

1 Ответ

1 голос
/ 13 января 2020

Предположим, у вас есть двумерные массивы значений высоты для местности и уровня воды. И что уровень воды установлен на ноль в местах без воды.

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

import numpy as np
import matplotlib.pyplot as plt

# Generate test data, terrain is some sine on the distance to the center
terrain_x, terrain_y = np.meshgrid(np.linspace(-15, 15, 1000), np.linspace(-15, 15, 1000))
r = np.sqrt(terrain_x * terrain_x + terrain_y * terrain_y)
terrain_z = 5 + 5 * np.sin(r)

# test data for water has some height where r is between 3 and 4 pi, zero everywhere else
water_z = np.where(3 * np.pi < r, 3 - terrain_z, 0)
water_z = np.where(4 * np.pi > r, water_z, 0)

extent = [-15, 15, -15, 15]

fig, (ax1, ax2, ax3) = plt.subplots(ncols=3)

ax1.imshow(terrain_z, cmap="YlOrBr", extent=extent)
ax1.set_title('Terrain')

ax2.imshow(water_z, cmap="Blues", extent=extent)
ax2.set_title('Water')

ax3.imshow(terrain_z, cmap="YlOrBr", extent=extent)
water_z = np.where(water_z > 0, water_z, np.nan)
ax3.imshow(water_z, cmap="Blues", extent=extent)
ax3.set_title('Combined')

plt.show()

resulting plots

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