地理数据 plot/map python 和 matplotlib 中的线条
Geographical data plot/map with lines in python and matplotlib
我记得在博客上看到 post 一种可视化地理数据的好方法。它只是代表纬度的线和要显示的变量的线的高点。我试着在下面的图片上画出它:
你们中的一些人还记得解释如何生成这些地图的图书馆甚至博客 post 吗?
(我依稀记得它是 matplotlib & python,但我很可能是错的)
您是否正在考虑类似于 this? Possibly you could also do a cascade plot like this 的 3D 情节?最后一种情节的代码是这样的:
# Input parameters:
padding = 1 # Relative distance between plots
ax = gca() # Matplotlib axes to plot in
spectra = np.random.rand((10, 100)) # Series of Y-data
x_data = np.arange(len(spectra[0])) # X-data
# Figure out distance between plots:
max_value = 0
for spectrum in spectra:
spectrum_yrange = (np.nanmax(spectrum) -
np.nanmin(spectrum))
if spectrum_yrange > max_value:
max_value = spectrum_yrange
# Plot the individual lines
for i, spectrum in enumerate(spectra):
# Normalize the data to max_value
data = (spectrum - spectrum.min()) / float(max_value)
# Offset the individual lines
data += i * padding
ax.plot(x_data, data)
我认为这就是您想要的 - 在 3d 轴上绘制恒定纬度线。我已经在评论中解释了每个部分的作用
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import itertools
#read in data from csv organised in columns labelled 'lat','lon','elevation'
data = np.recfromcsv('elevation-sample.csv', delimiter=',')
# create a 3d axis on a figure
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# Find unique (i.e. constant) latitude points
id_list = np.unique(data['lat'])
# stride is how many lines to miss. set to 1 to get every line
# higher to miss more
stride = 5
# Extract each line from the dataset and plot it on the axes
for id in id_list[::stride]:
this_line_data = data[np.where(data['lat'] == id)]
lat,lon,ele = zip(*this_line_data)
ax.plot(lon,lat,ele, color='black')
# set the viewpoint so we're looking straight at the longitude (x) axis
ax.view_init(elev=45., azim=90)
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')
ax.set_zlabel('Elevation')
ax.set_zlim([0,1500])
plt.show()
我用来测试的数据集不是我的,是我在github here上找到的。
输出如下:
注意 - 如果我误解了您草图中的轴标签,您可以交换纬度和经度。
我记得在博客上看到 post 一种可视化地理数据的好方法。它只是代表纬度的线和要显示的变量的线的高点。我试着在下面的图片上画出它:
你们中的一些人还记得解释如何生成这些地图的图书馆甚至博客 post 吗? (我依稀记得它是 matplotlib & python,但我很可能是错的)
您是否正在考虑类似于 this? Possibly you could also do a cascade plot like this 的 3D 情节?最后一种情节的代码是这样的:
# Input parameters:
padding = 1 # Relative distance between plots
ax = gca() # Matplotlib axes to plot in
spectra = np.random.rand((10, 100)) # Series of Y-data
x_data = np.arange(len(spectra[0])) # X-data
# Figure out distance between plots:
max_value = 0
for spectrum in spectra:
spectrum_yrange = (np.nanmax(spectrum) -
np.nanmin(spectrum))
if spectrum_yrange > max_value:
max_value = spectrum_yrange
# Plot the individual lines
for i, spectrum in enumerate(spectra):
# Normalize the data to max_value
data = (spectrum - spectrum.min()) / float(max_value)
# Offset the individual lines
data += i * padding
ax.plot(x_data, data)
我认为这就是您想要的 - 在 3d 轴上绘制恒定纬度线。我已经在评论中解释了每个部分的作用
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import itertools
#read in data from csv organised in columns labelled 'lat','lon','elevation'
data = np.recfromcsv('elevation-sample.csv', delimiter=',')
# create a 3d axis on a figure
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# Find unique (i.e. constant) latitude points
id_list = np.unique(data['lat'])
# stride is how many lines to miss. set to 1 to get every line
# higher to miss more
stride = 5
# Extract each line from the dataset and plot it on the axes
for id in id_list[::stride]:
this_line_data = data[np.where(data['lat'] == id)]
lat,lon,ele = zip(*this_line_data)
ax.plot(lon,lat,ele, color='black')
# set the viewpoint so we're looking straight at the longitude (x) axis
ax.view_init(elev=45., azim=90)
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')
ax.set_zlabel('Elevation')
ax.set_zlim([0,1500])
plt.show()
我用来测试的数据集不是我的,是我在github here上找到的。
输出如下:
注意 - 如果我误解了您草图中的轴标签,您可以交换纬度和经度。