文章目录

  • 前言
  • 绘制sst分布图

前言

这里使用的数据为1°×1°的NOAA卫星月平均sst数据,这是下载的网址https://psl.noaa.gov/data/gridded/tables/sst.html,进去可以选择自己想要的数据。


提示:这里用到的库需要提前安装,具体流程可自行百度。

绘制sst分布图

思路:先提取nc文件中存储的经纬度以及sst数据,由于数据密度较低,对其进行插值。另外,由于项目对岸线的精度要求较高,下载了全球的海岸线数据进行叠加,可视要求自行选择,如对精度要求不高,Basemap库中有自带的海岸线数据。存储图片后,对陆地部分进行透明化处理,以便贴合项目。

代码如下:

import netCDF4 as nc
from matplotlib import pyplot as plt
from matplotlib.patches import Polygon
import numpy as np
from mpl_toolkits.basemap import Basemap
from scipy import interpolate
import warnings
from PIL import Imagedef readnc(openfilepath = 'D:\\sst.mon.mean.nc',month=None):# 忽略警告warnings.filterwarnings("ignore")# 显示全部数据np.set_printoptions(threshold=np.inf)# 读取nc文件f = nc.Dataset(openfilepath)# print(dataset.variables.keys()) # 打印变量的属性值# 读取数据lat = f.variables['lat'][:]lon = f.variables['lon'][:]time = f.variables['time']sst = f.variables['sst'][month]# 关闭nc文件f.close()return lon, lat, sstdef Interpolation(lon, lat, sst, times=1):sst[sst>50] = 20# sst=np.squeeze(sst)func = interpolate.interp2d(lon,lat,sst,kind='linear')lon_new = np.linspace(min(lon),max(lon),360*times)lat_new = np.linspace(min(lat),max(lat),180*times)sst_new = func(lon_new,lat_new)#xnew, ynew是一维的,输出znew是二维的return lon_new, lat_new, sst_newdef drawing(lon_new, lat_new, sst_new, savefilepath='D:\\中国近海sst分布图\\未处理\\sst.png'):# 定位到具体经纬度map = Basemap(llcrnrlon = 114.5, llcrnrlat = 20.5, urcrnrlon = 130.5, urcrnrlat = 34.5)lon, lat = np.meshgrid(lon_new, lat_new)plt.figure(figsize=(9, 7.88)) # 设置画布大小ax = plt.gca()plt.style.use('classic')# # 绘制经纬线# map.drawparallels(np.arange(-90., 91., 5.), labels=[1,0,0,0], fontsize=10)  # 纬线# map.drawmeridians(np.arange(-180., 181., 5.), labels=[0,0,0,1], fontsize=10)  # 经线# m.drawmapboundary(fill_color = 'aqua')# map.fillcontinents(color = 'white', lake_color = 'white')# map.drawcoastlines()map.readshapefile('C:\\Users\\陌离\\Desktop\\全球海岸线shape\\GSHHS_h_L1', name='country', color='w')# D:\\ArcGIS10.3\\海岸线数据\\全球海岸线\\海岸线# C:\\Users\\陌离\\Desktop\\全球海岸线shape\\GSHHS_h_L1for shp in map.country:poly = Polygon(xy=shp, facecolor='w') # 填充ax.add_patch(poly)# 添加Colorbar# cmap = plt.get_cmap('rainbow')colormesh = map.pcolormesh(lon, lat, sst_new)# cb = map.colorbar(colormesh, location='bottom', label="contour lines", pad="10%")# 去掉图片边框ax.spines['right'].set_visible(False)ax.spines['left'].set_visible(False)ax.spines['top'].set_visible(False)ax.spines['bottom'].set_visible(False)plt.subplots_adjust(left=0, bottom=0, right=1, top=1, hspace = 0, wspace = 0) # 让图片铺满画布# 添加标题、单位# cb.set_label("℃")# plt.title('Sea Surface Temperature')plt.savefig(savefilepath)# plt.show()def setalpha(openfilepath = 'D:\\中国近海sst分布图\\未处理\\sst.png', savefilepath = 'D:\\中国近海sst分布图中国近海sst分布图\\透明化\\sst_alpha.png'):# 将图片中的白色改为透明色img = Image.open(openfilepath)  # 读取照片img = img.convert('RGBA')    # 转换格式,确保像素包含alpha通道width, height = img.size     # 长度和宽度for i in range(0,width):     # 遍历所有长度的点for j in range(0,height):       # 遍历所有宽度的点data = img.getpixel((i,j))  # 获取一个像素if (data.count(255) == 4):  # RGBA都是255,改成透明色img.putpixel((i,j),(255,255,255,0))img.save(savefilepath)  # 保存图片if __name__ == '__main__':for i in range(10):lon, lat, sst = readnc(month=i+1548)lon_new, lat_new, sst_new = Interpolation(lon, lat, sst, times=20)drawing(lon_new, lat_new, sst_new, savefilepath='D:\\中国近海sst分布图\\未处理\\2020.'+str(i+1)+'.png')setalpha(openfilepath='D:\\中国近海sst分布图\\未处理\\2020.'+str(i+1)+'.png', savefilepath='D:\\中国近海sst分布图\\透明化\\2020.'+str(i+1)+'.png')print('已完成{}月sst的绘制'.format(i+1))

以上是最终做出来的效果图,经纬度度格网、colorbar、坐标轴根据要求隐去了,可根据需要添加。

这是第一次写博客,还有很多东西不会哈哈,以后会慢慢更新的,记录下自己学习的经历。

绘制中国近海的sst分布图相关推荐

  1. 使用pyecharts绘制中国历代都城的分布图

    闲来无事,使用Python版本的echarts绘制中国历代(夏~民国)都城分布图: 图中不同颜色代表不同城市被定为都城的次数.数据不完整,仅仅做个demo吧. 注意:不同版本的pyecharts差异较 ...

  2. Basemap绘制中国地图

    2022.06.02更新 CHN_adm_shp.zip 网盘下载链接: 链接:https://pan.baidu.com/s/11igf-bfDLuolI5HzEykzMw 提取码:oas6 201 ...

  3. Matlab绘制中国地图(大陆地区)

    1 简介 MATLAB是著名的科学软件,具有绘图.编程.仿真等强大的功能.现在介绍MATLAB绘制中国地图的三种方式,分别是(1)使用m_map工具箱命令绘制中国地图:(2)使用mapshow和geo ...

  4. 各纬度气候分布图_读中国年平均气温分布图,寻找中国全年平均气温最高和最低的地方...

    自然地理环境包括地形.气候.土壤.植被和水文等要素,一个地区的气候又是由气温.降水.光照等要素来组成的.在分析一个地区的气温特征时,我们主要从年均温和气温年较差两个角度来入手,影响气温高低的因素有很多 ...

  5. 使用raphael.js绘制中国地图

    最近的数据统计项目中要用到中国地图,也就是在地图上动态的显示某个时间段某个省份地区的统计数据,我们不需要flash,仅仅依靠raphael.js以及SVG图像就可以完成地图的交互操作.在本文中,我给大 ...

  6. qcustomplot绘制热力图瀑布图_使用REmap绘制中国地图

    上次我们介绍了使用ggplot2绘制中国热力地图,需要温习的同学可以点击以下链接 使用ggplot2绘制中国地图  .在使用ggplot2绘制的时候,需要进行数据处理的步骤比较多,今天我们介绍一个新的 ...

  7. Ant Design Charts绘制中国地图并动态添加标记点

    绘制中国地图并动态添加标记点,在这里使用的是antd charts绘制,需要求只显示中国地图,并且跟踪物流信息 使用组件地址: 图表 - Plot | Ant Design Charts 这里的引入方 ...

  8. matlab画中国近海有效波高时遇到的问题及m_map的用法注意事项

    matlab画中国近海有效波高时遇到的问题及m_map的用法注意事项 数据问题 这个数据很不友好,它的纬度从大到小,经度又从小到大. 这需要笔者转置数据. 先定位数据在矩阵的位置.最高的纬度是50°N ...

  9. [Echarts可视化] 一.入门篇之简单绘制中国地图和贵州地区

    最近发生了很多事情,去到了一个新环境学习.但是不论在哪里,我都需要不忘初心,坚持做自己喜欢的事情,在CSDN写博客.教学.爱娜.生活等等.         这篇文章主要是通过Echarts可视化介绍入 ...

最新文章

  1. PyTorch 笔记(20)— torchvision 的 datasets、transforms 数据预览和加载、模型搭建(torch.nn.Conv2d/MaxPool2d/Dropout)
  2. mysql查看修改记录_(转)MySql中监视增删改查和查看日志记录
  3. Deploying Windows Mobile 6 with Exchange Server 2007 白皮书
  4. LeetCode Single Number
  5. Java中resource文件夹
  6. ruby nil_Ruby中的数据类型-True,False和Nil用示例解释
  7. uniapp网络请求封装;小程序请求接口封装;uni.request接口封装
  8. 2021巨量引擎母婴行业白皮书
  9. LeetCode MySQL刷题——day3
  10. Android 功耗(7)---思维导图
  11. 这次是小米!5.31亿元深圳买地:将与腾讯、阿里做邻居
  12. linux修改端口监听地址,修改nginx/Tomcat等Web服务的端口监听地址
  13. c语言 0494-方程求根,C语言:作业一 选择结构.doc
  14. 4.linux 命令行 光标移动技巧
  15. STM32笔记记录2
  16. 有趣的USB接口和颜色分类
  17. codevs 4093 EZ的间谍网络
  18. 武汉理工大学计算机学院转专业细则,计算机学院武汉理工大学2009年各学院转专业工作实施细则.doc...
  19. 学习笔记 第八周 第二篇(修改版)
  20. 微信小程序报错{“errMsg“:“hideLoading:fail:toast can‘t be found“}

热门文章

  1. 三个字母排列组合c语言,n个球的排列组合算法
  2. Functional ALV系列 (05) - ALV 作为数据编辑界面
  3. sql 判断分钟是偶数数据_mssql sqlserver判断一个整数是否为奇数偶数的方法分享...
  4. XILINX 7系列FPGA_Slice_存储器_XADC篇
  5. 《雨巷》-- 戴望舒
  6. 知云文献翻译打不开_推荐一款文献翻译软件,免费又高效的那种
  7. SQL日期、转换、通用函数
  8. matlab BPSK调制方式代码实现
  9. 新型的火灾报警系统设有多个设备联动的模式,其能够服务于智能化以及化的火灾报警
  10. SilverLight:布局(2)GridSplitter(网格分割)垂直分割、水平分割