最近在用matlab跑数据,时间比较充足,所以想学一下python来画空间分布图,之前没有接触过python,感觉画图会比matlab更好看更流畅一些。画下来确实有耳目一新的感觉。

还是利用第一篇笔记里的数据,画格陵兰岛的某数据的空间分布,初步绘制出来的结果如下。

关于绘图中的难点:1.二次曲线外观(扇形的地图) 2.填色  3.cartopy库的安装!!!属实在库的安装上折腾了好久

1.如何保持二次曲线外观,在GitHub上有相关代码

GeoAxes.set_extent on non-cylindrical projections · Issue #697 · SciTools/cartopy (github.com) 链接在此

如何在Cartopy's LambertConformal中限制经度范围并保持二次曲线外观? - 问答 - 腾讯云开发者社区-腾讯云 (tencent.com)

搬运的中文版

xlim = [-120, -60]
ylim = [60, 80]rect = mpath.Path([[xlim[0], ylim[0]],[xlim[1], ylim[0]],[xlim[1], ylim[1]],[xlim[0], ylim[1]],[xlim[0], ylim[0]],]).interpolated(20)proj_to_data = ccrs.PlateCarree()._as_mpl_transform(ax) - ax.transData
rect_in_target = proj_to_data.transform_path(rect)
ax.set_boundary(rect_in_target)

以上是代码的关键部分

我自己的代码如下

import numpy as np
import pandas as pd
import cartopy.crs as ccrs
import matplotlib.colors as mcolors
from cartopy.io.shapereader import Reader
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import cartopy.feature as cfeature
from matplotlib import rcParams
from osgeo import gdal
import csv
from shapely.prepared import prep
import shapefile
import shapely.geometry as sgeom
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
from pylab import *
from mpl_toolkits import axisartist
import matplotlib.path as mpath
import numpy as np
import cmaps
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.colors import ListedColormapcmaps.BlueWhiteOrangeRed  #引用NCL的colormap
# 设置字体
config = {"font.family": 'SimHei', "font.size": 16, "mathtext.fontset": 'stix'}
rcParams.update(config)
rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
rcParams['axes.unicode_minus'] = False  # 用来正常显示负号# 读取数据
data = np.loadtxt(open("F:\浏览器\gracedata.csv", "rb"), delimiter=",")  # 提取csv的某一列
# data_info = pd.read_csv('F:\浏览器\GRACE-TWSA.csv')
data = data.reshape(-1, 1)  # 一行转换为一列
data.resize((252, 122))
data = np.transpose(data)
x = np.linspace(-73.125, -10.375, 252)
y = np.linspace(59.375, 89.625, 122)
xx, yy = np.meshgrid(x, y)# 绘制掩膜
filePath = r'E:\greenland\greenland\greenland.shp'
with shapefile.Reader(filePath) as reader:gl = sgeom.shape(reader.shape(0))def polygon_to_mask(polygon, x, y):"""生成落入多边形的点的掩膜数组."""x = np.atleast_1d(xx)y = np.atleast_1d(yy)mask = np.zeros(x.shape, dtype=bool)# 判断每个点是否落入polygon, 不包含边界.prepared = prep(polygon)for index in np.ndindex(x.shape):point = sgeom.Point(x[index], y[index])if prepared.contains(point):mask[index] = Truereturn maskmask = polygon_to_mask(gl, xx, yy)
# 绘制图像
data = np.flipud(data)
data_mask = np.ma.array(data, mask=~mask)
print('data_mask:', data_mask)
print('mask:', mask)
# %%
# 创建绘图空间,使用兰伯特投影
fig = plt.figure(figsize=(3, 2.5), dpi=400, linewidth=1)  # 创建figure对象
# ax1 = plt.axes()
# 投影设置
lon1, lon2, lat1, lat2 = [-80, -10, 58, 85]# -----------------------------------------------------------------------------
rect = mpath.Path([[lon1, lat1], [lon2, lat1],[lon2, lat2], [lon1, lat2], [lon1, lat1]]).interpolated(150)name = 'NearsidePerspective'
proj = ccrs.LambertConformal(central_longitude=(lon1 + lon2) * 0.5,central_latitude=(lat1 + lat2) * 0.5)
ax = fig.subplots(1, 1, subplot_kw = {'projection': proj})
# ---关键部分-------关键部分------------------关键部分-------------------关键部分----------
proj_to_data = ccrs.PlateCarree()._as_mpl_transform(ax) - ax.transData
rect_in_target = proj_to_data.transform_path(rect)
ax.set_boundary(rect_in_target)
ax.set_xlim(rect_in_target.vertices[:, 0].min(), rect_in_target.vertices[:, 0].max())
ax.set_ylim(rect_in_target.vertices[:, 1].min(), rect_in_target.vertices[:, 1].max())
# *****************************************************************************
# *****************************************************************************# ax.spines['bottom'].set_linewidth('0.2')
# 图名
ax.set_title('格陵兰岛',fontsize=8,loc='center')
# ax.add_feature(cfeature.OCEAN.with_scale('50m'))
# ax.add_feature(cfeature.LAND.with_scale('50m'))
ax.add_feature(cfeature.COASTLINE.with_scale('50m'), linewidth=0.1)cmap = cmaps.BlueWhiteOrangeRed  #引用NCL的colormapnewcolors = cmap(np.linspace(0,1,12))#分片操作,生成0到1的12个数据间隔的数组newcmap = ListedColormap(newcolors[::1])  #重构为新的colormap# 绘制中国边界
cs = ax.pcolormesh(xx, yy, data_mask, transform=ccrs.PlateCarree(), cmap= newcmap)

2.关于填色:使用plt.imshow(绘制热图)  或者像我的图一样使用pcolormesh.

3.关于cartopy库的安装不再赘述。

利用python画空间分布图相关推荐

  1. 用python画动态樱花_利用python画一棵漂亮的樱花树,turtle画图代码大全,此处感谢知乎大佬小白...

    利用python画一棵漂亮的樱花树,turtle画图代码大全,此处感谢知乎大佬小白 此处感谢知乎大佬 小白练手 练习一下比较流行的turtle(海龟库) 画一棵漂亮的樱花树,效果如下: ps: 是动态 ...

  2. python画曲线-利用python画出AUC曲线的实例

    以load_breast_cancer数据集为例,模型细节不重要,重点是画AUC的代码. 直接上代码: from sklearn.datasets import load_breast_cancer ...

  3. python中词云图怎样变成特殊图案_如何利用python画出一个多变的词云图?(1)...

    问题描述: 如何利用python画出一个多变的词云图? 解决方法:import numpy as np import matplotlib import matplotlib.pyplot as pl ...

  4. python画一颗心_利用python画一颗心的方法示例

    前言 Python一般使用Matplotlib制作统计图形,用它自己的说法是'让简单的事情简单,让复杂的事情变得可能'.用它可以制作折线图,直方图,条形图,散点图,饼图,谱图等等你能想到的和想不到的统 ...

  5. python怎么画出圆润的曲线_利用python画出AUC曲线的实例

    以load_breast_cancer数据集为例,模型细节不重要,重点是画AUC的代码. 直接上代码: from sklearn.datasets import load_breast_cancer ...

  6. python画二维温度云图_利用python画出词云图

    本文将介绍如何利用python中相应的模块画出词云图.首先给出效果图: 其中词云图中的词汇是对手机短信中的垃圾短信的统计,字体越大表示在垃圾短信中出现的频次越高.下面给出具体的步骤. 读取" ...

  7. 如何利用python画一些简单的图形

    如何利用python画一些简单的图形 1 问题描述 在我们学习python的初期,就想拿一些实际问题来练手,好提高自己的技术.我们都了解可以用python画很多漂亮的图,但是作为新手的我们如何来画一些 ...

  8. 利用python画爱心表白

    *七夕来袭!是时候展现专属于程序员的浪漫了! 创意代码表白 简单分享一下如何利用python画爱心表白 以程序员的方式撒狗粮,专业浪漫,值得拥有! 代码演示 # 导入海龟包 import turtle ...

  9. 利用python画梯形图案例

    利用python画梯形图案例 import matplotlib.pyplot as plt import numpy as npdef mystep(x,y, ax=None, where='pre ...

最新文章

  1. oracle limsize,查看oracle数据库----size
  2. sklearn-GridSearchCV调节超参数
  3. Java自动装箱与拆箱
  4. linux终端常用命令和windows终端常用命令对比
  5. 形态学操作——开闭运算、顶帽底(黑)帽变换
  6. c语言不会可以学好java吗_不会C语言能学Java吗
  7. anaconda 安装pytorch_conda上安装PyTorch
  8. 10-R语言文本挖掘tm包详解
  9. bzoj5108 [CodePlus2017]可做题 位运算dp+离散
  10. git log 提交日志及图形化显示
  11. Kubernetes Node Controller源码分析之配置篇
  12. Spring 学习笔记---Bean的生命周期
  13. 在线解析短视频去水印工具
  14. flac格式的音乐怎么转换成mp3格式
  15. 单元测试总结反思_考试反思,考试反思作文
  16. BOX物联网盒子的作用和调试程序
  17. 托福口语_新航道_刘莹_task 3 task5
  18. 万能密码:‘or 1=1-- 实战SQL注入,秒破后台
  19. 从npm、npx说起,到shell
  20. 一.Docker之springboot+docker swam实现负载均衡

热门文章

  1. 实现Linux与windows文件互传
  2. [转一好玩的博文]毕业三年,遇见的傻逼公司大盘点
  3. LDIFDE试验全记录
  4. 所见所得的OFFICE功能区编辑器(自定义界面编辑)RibbonCreator
  5. Excel制作四分位图
  6. Android:WebView使用常见问题汇总(持续更新)
  7. CS143 6、7. 自顶向下和自底向上的语法分析
  8. 12个最好的开源报表工具
  9. FOC:在MCU上检验Clark和Park坐标变换是否正确
  10. 静夜思:“小微科技公司”如何建立自己的竞争优势