新郑网站开发,北京厦门网站优化,网站结构的规划与设计,免费的软件网站Matplotlib 自 带 4 类别 地理投影#xff1a; Aitoff, Hammer, Mollweide 及 Lambert 投影#xff0c;可以 结 合以下四 张 不同 的 图 了解四 种 不同投影 区别 。 12.1Aitoff投影
12.1.1图像呈现 12.1.2绘图代码
import numpy as np # 导入numpy库#xff0c;用于… Matplotlib 自 带 4 类别 地理投影 Aitoff, Hammer, Mollweide 及 Lambert 投影可以 结 合以下四 张 不同 的 图 了解四 种 不同投影 区别 。 12.1Aitoff投影
12.1.1图像呈现 12.1.2绘图代码
import numpy as np # 导入numpy库用于处理数组和数值计算
import matplotlib.pyplot as plt # 导入matplotlib的绘图模块用于可视化
from matplotlib import rcParams # 从matplotlib中导入rcParams它用于处理matplotlib的配置参数
# 定义一个字典config其中包含字体、大小和其他相关的配置参数
config {font.family: serif, font.size: 10.5, mathtext.fontset: stix, font.serif: [SimSun]}
rcParams.update(config) # 使用config字典中的配置参数更新rcParams
plt.rcParams[axes.unicode_minus] False # 运行配置参数总的轴axes正常显示正负号minusN 100# 定义数据点的数量为100
np.random.seed(157)# 设置随机种子使生成的随机数可复现
long np.random.random(N) * 360 - 180# 生成[-180, 180]范围内的随机经度
lat np.random.random(N) * 180 - 90# 生成[-90, 90]范围内的随机纬度
plt.figure(figsize(12, 7), dpi110)# 创建一个新的图形窗口并设置其大小和分辨率
plt.subplot(111,projectionaitoff )# 创建一个子图使用aitoff投影方式
plt.scatter(long, lat, marker*, colorred, s40)# 在子图上绘制散点图设置散点样式、颜色和大小
plt.title(Aitoff)
plt.grid(True)# 显示网格线
plt.show()
12.2 Hammer投影
12.2.1图像呈现 12.2.2绘图代码
import numpy as np # 导入numpy库用于处理数组和数值计算
import matplotlib.pyplot as plt # 导入matplotlib的绘图模块用于可视化
from matplotlib import rcParams # 从matplotlib中导入rcParams它用于处理matplotlib的配置参数# 定义一个字典config其中包含字体、大小和其他相关的配置参数
config {font.family: serif, font.size: 10.5, mathtext.fontset: stix, font.serif: [SimSun]}
rcParams.update(config) # 使用config字典中的配置参数更新rcParams
plt.rcParams[axes.unicode_minus] False # 运行配置参数总的轴axes正常显示正负号minus
# 导入cartopy的crs模块crs代表坐标参考系统Coordinate Reference Systems
import cartopy.crs as ccrs
# 导入cartopy的feature模块这个模块提供了一些自然地理特征如陆地、海洋等
import cartopy.feature as cfeature# 创建一个新的图形和坐标轴
fig plt.figure(figsize(10, 5))
# 在图形中添加一个子图设置其位置为1行1列的第1个位置并设置其投影为Hammer投影
ax fig.add_subplot(1, 1, 1, projectionccrs.Hammer())# 向坐标轴中添加自然地理特征这里添加的是陆地和海洋
ax.add_feature(cfeature.LAND)
ax.add_feature(cfeature.OCEAN)
# 设置坐标轴的范围为全球即显示整个地球
ax.set_global()
# 在坐标轴上绘制网格线并设置draw_labels为True表示在网格线上绘制标签
ax.gridlines(draw_labelsTrue)# 显示图形
plt.show()
12.3Mollweide投影
12.3.1图像呈现 12.3.2绘图代码
import numpy as np # 导入numpy库用于处理数组和数值计算
import matplotlib.pyplot as plt # 导入matplotlib的绘图模块用于可视化
from matplotlib import rcParams # 从matplotlib中导入rcParams它用于处理matplotlib的配置参数# 定义一个字典config其中包含字体、大小和其他相关的配置参数
config {font.family: serif, font.size: 10.5, mathtext.fontset: stix, font.serif: [SimSun]}
rcParams.update(config) # 使用config字典中的配置参数更新rcParams
plt.rcParams[axes.unicode_minus] False # 运行配置参数总的轴axes正常显示正负号minus
import cartopy.crs as ccrs
import cartopy.feature as cfeature# 创建一个新的图形和坐标轴设置投影为Mollweide
fig plt.figure(figsize(10, 5))
# 在图形中添加一个子图并设置其投影为Mollweide投影
# Mollweide投影是一种等面积伪圆柱投影能保持全球面积的比例
ax fig.add_subplot(1, 1, 1, projectionccrs.Mollweide())# 向坐标轴中添加自然地理特征
# 添加陆地、海洋、国界用虚线表示和河流
ax.add_feature(cfeature.LAND)
ax.add_feature(cfeature.OCEAN)
ax.add_feature(cfeature.BORDERS, linestyle:)
ax.add_feature(cfeature.RIVERS)# 设置坐标轴范围为全球
ax.set_global()# 如果需要可以添加网格线
ax.gridlines()# 显示图形
plt.show()
12.4Lambert投影
12.4.1图像呈现【方法1】 12.4.2绘图代码
import numpy as np # 导入numpy库用于处理数组和数值计算
import matplotlib.pyplot as plt # 导入matplotlib的绘图模块用于可视化
from matplotlib import rcParams # 从matplotlib中导入rcParams它用于处理matplotlib的配置参数# 定义一个字典config其中包含字体、大小和其他相关的配置参数
config {font.family: serif, font.size: 10.5, mathtext.fontset: stix, font.serif: [SimSun]}
rcParams.update(config) # 使用config字典中的配置参数更新rcParams
plt.rcParams[axes.unicode_minus] False # 运行配置参数总的轴axes正常显示正负号minus
N 100
np.random.seed(157)
long np.random.random(N) * 2 * np.pi - np.pi
lat np.random.random(N) * np.pi - (np.pi / 2)
plt.figure(figsize(12, 7), dpi110)
plt.subplot(111,projectionlambert)
plt.scatter(long, lat, marker*, colorred, s40)
plt.title(Lambert)
plt.grid(True)plt.show()
12.4.3图像呈现【方法二】 12.4.4绘图代码
import numpy as np # 导入numpy库用于处理数组和数值计算
import matplotlib.pyplot as plt # 导入matplotlib的绘图模块用于可视化
from matplotlib import rcParams # 从matplotlib中导入rcParams它用于处理matplotlib的配置参数# 定义一个字典config其中包含字体、大小和其他相关的配置参数
config {font.family: serif, font.size: 10.5, mathtext.fontset: stix, font.serif: [SimSun]}
rcParams.update(config) # 使用config字典中的配置参数更新rcParams
plt.rcParams[axes.unicode_minus] False # 运行配置参数总的轴axes正常显示正负号minus
N 100
np.random.seed(157)
long np.random.random(N) * 2 * np.pi - np.pi
lat np.random.random(N) * np.pi - (np.pi / 2)
plt.figure(figsize(12, 7), dpi110)
plt.subplot(111,projectionlambert)
plt.scatter(long, lat, marker*, colorred, s40)
plt.title(Lambert)
plt.grid(True)plt.show()
代码注释
这段代码首先导入了必要的模块然后创建了一个图形和一个子图并设置了投影为Lambert Conformal投影。通过central_longitude和central_latitude参数你可以设置投影的中心点。在这个例子中中心经度设置为-90.0西经90度中心纬度设置为45.0北纬45度这通常用于展示北半球的地图。
然后使用set_extent方法设置了地图的边界范围。crsccrs.PlateCarree()表示边界范围是在经纬度坐标系Plate Carree投影下定义的。
接下来通过add_feature方法添加了陆地、海洋、国界和河流等自然地理特征。
最后使用gridlines方法添加了网格线并通过plt.show()显示了图形。
12.5几种绘图方式的比较
Aitoff投影、Hammer投影、Mollweide投影和Lambert投影都是地理学和地图制作中常用的投影方式它们各自具有不同的特点和适用场景。
12.5.1投影方式对比说明
Aitoff投影 特点Aitoff投影是经过改进的方位投影采用椭圆形经纬网的折衷投影。它适用于绘制小比例的世界地图。适用场景由于其经纬网的特性Aitoff投影在展示全球数据时能够保持较好的形状和面积平衡但会引入一定程度的畸变。发明者由俄罗斯制图员David A. Aitoff于1889年开发。Hammer投影哈默投影 特点Hammer投影是由等面积横轴方位投影派生而来它等面积地表示整个世界。其经纬线网交点坐标由等面积横轴方位投影的每一横坐标乘以2得到并重新注记经线。适用场景Hammer投影常用于制作小比例尺世界地图因为它能够保持全球面积的比例不变这对于需要准确展示面积分布的地图尤为重要。发明者由德国学者H.H.E.哈默(H.H.Ernst von Hammer)于1892年应用Aitoff变换方法拟定。Mollweide投影摩尔威德投影 特点Mollweide投影是一种等面积伪圆柱投影它将经线投影成为椭圆曲线。这种投影方式能够保持全球面积的比例。适用场景由于其等面积的特性Mollweide投影在需要准确反映面积分布的地图制作中特别有用如气候学、地理学等领域的研究。发明者由德国数学家摩尔威德K.B.Mollweide于1805年创拟。Lambert投影兰伯特投影 特点Lambert投影是一种保形投影它在一定区域内保持形状的真实性。它有多种变种如正轴Lambert投影、斜轴Lambert投影等。适用场景Lambert投影常用于特定区域的地图制作如中纬度地区的详细地图。由于其保形特性它在需要准确反映形状和方向的应用中表现出色。发明者与变种Lambert投影由德国数学家Johann Heinrich Lambert提出并有多种变种以适应不同的地图制作需求。
12.5.2总结归纳
Aitoff投影和Hammer投影都适用于小比例尺的世界地图制作其中Aitoff投影更注重形状和面积的平衡而Hammer投影则强调面积的准确性。Mollweide投影以其等面积的特性在需要反映面积分布的地图制作中占据优势。Lambert投影则以其保形特性在特定区域地图制作中表现出色。
在选择投影方式时需要根据地图的用途、比例尺、展示的数据类型以及所需的准确性和可读性等因素进行综合考虑。