Создайте трехмерную диаграмму рассеяния поверх двумерного изображения, сохраняя пространственные отношения (matplotlib, gdal, python) - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь создать фигуру, на которой график трехмерного рассеяния поверх двухмерного изображения. 3D-данные представляют широтно-длинные местоположения эпицентров землетрясения (x, y в десятичных градусах) и их глубины (z). 2-мерное изображение будет иметь значение .tif в нижней части графика, чтобы проиллюстрировать, как выглядит поверхность. Я могу успешно построить трехмерную диаграмму рассеяния, и у меня был ограниченный успех при создании поверхностного графика из моего tif-файла (путем преобразования его в .png), но я не могу успешно объединить их. 2-е изображение уже представляет ту же степень, что и 3d-данные (N: 33.633, S: 33.336, E: -115.604, W: -115.955), но мне нужно убедиться, что координаты 3d-данных соответствуют координатам изображения в Окончательный сюжет.

Очень похоже на в этом примере , хотя у меня возникают трудности с применением этого к моим указанным c файлам.

Я подозреваю, что мне нужно либо построить двухмерный график из нескольких полос в .tif, а затем применить трехмерный график ИЛИ преобразовать .tif в .png и каким-то образом установить углы равными их координаты реального мира, так что они могут быть построены с 3D-данными, но я не уверен, как это сделать. Ниже приведен мой код для трехмерного графика, а также его вывод и изображение, которое я хотел бы добавить к графику.

"""User Defined Variables"""
# CSV location
eq_csv = r'/Location/to/file/Seismic_extent/seis_1950Tod.csv'
mag = 2.5
image = r'/location/to/file/2013Landsat8/clipped.tif'
""""""

# yes i know i have unnecessary packages loaded but I have done a lot of troubleshooting and dont really feel like editing this yet.
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from pylab import *
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.cbook import get_sample_data
from matplotlib._png import read_png
import matplotlib.image as mpimg

#create 3d plot
fig = plt.figure()
ax = fig.gca(projection = '3d')

# Read in earthquake data
eq_df = pd.read_csv(eq_csv)
eq_data = eq_df[eq_df.MAG >= mag] #retrieve rows where magnitude is greater than or equal to selected value above
eq_data = eq_data[['LON', 'LAT', 'DEPTH', 'MAG']] #select only Lat, Lon, Depth, Mag
x = eq_data['LON']
y = eq_data['LAT']
z = eq_data['DEPTH']
mag = eq_data['MAG']

ax.scatter(x, y, z)

#Set Labels
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')
ax.set_zlabel('Depth (km)')

ax.set_xticks([-115.9, -115.8, -115.7])
ax.set_yticks([33.4, 33.5, 33.6])

ax.set_zlim3d(0, 13)
plt.gca().invert_zaxis() #inverts depth axis (z), if it isn't last things get weird
plt.show()

plot extent

Я могу при необходимости добавлять ссылки на фактические данные, которые я использую.

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