前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >超详细!空间学术网格数据绘制,配色超赞!!

超详细!空间学术网格数据绘制,配色超赞!!

作者头像
DataCharm
发布2021-12-16 15:18:12
1.3K0
发布2021-12-16 15:18:12
举报

今天小编带大家绘制一幅”颜值“超高的学术图表,起初原因也是群里的小伙伴询问怎么绘制。要知道我可是非常宠读者的哈~~绝对的安排!读者给出的图片如下:

读者询问的图片

小编第一眼也被这副作品吸引了,但立马想到这可能是使用MATLAB进行绘制的,而且数据也是地理信息专业相关的图表。要想完美复现这副作品则需要解决以下两个问题:

  • 如何找到可替代的数据?
  • Python/R如何使用MATLAB的colormap?

针对以上问题,我们分步骤解决,具体内容如下:

如何找到可替代的数据及处理?

在咨询完交流群中的相关专业大佬后,得出这种数据可能是NC网格数据,取不同维度数据进行绘制即可。小编研究生期间处理过葵花卫星nc网格数据,前一段时间也有其他同学咨询Python处理nc数据的问题,这次就简单说一下哈,内容如下:

Python-netCDF4库处理nc数据

在选择完使用葵花卫星nc数据进行绘制后,我们使用Python-netCDF4库 进行nc格式数据的处理(这里仅介绍读取和数据维度选择)。

代码语言:javascript
复制
import numpy as np
import pandas as pd
from netCDF4  import Dataset

nc_file = "NC_H08_20191111_0300_R21_FLDK.06001_06001.nc"
nc_data = Dataset(nc_file)

使用Dataset()函数即可读取,读取结果如下:

Dataset()读取数据结果

本期实例所涉及到的处理代码如下:

代码语言:javascript
复制
data_list = ['albedo_01','albedo_02','albedo_03','albedo_04','tbb_11','tbb_12','tbb_13',"SAZ"]
lat = 39.933
lon = 116.317

Xi = int(np.floor((60-lat)/ 0.02))
Yi = int(np.floor((lon-80)/ 0.02)) 

dicData = {key: value[:].data for key, value in nc_data.variables.items() if key in data_list}
data = {key: value[Xi,Yi] for key, value in dicData.items() if key in data_list}
# 获取40x40的网格数据
data_tif = {key: value[Xi-20:Xi+20,Yi-20:Yi+20] for key, value in dicData.items()}
band1 = data_tif.get('albedo_01')

以上即可获取我们随需要绘制的数据,注意:这里我们给出经纬度信息,获取以这个经纬度点周围40x40的数据。

以上就解决了我们数据来源问题,也顺带说了下nc数据的python读取方法,更过关于Python处理nc格式数据可在我直播的时候进行详细介绍或者参考:Python-netCDF4官网[1]

Python/R如何使用MATLAB的colormap?

获取parula颜色系

这里我们首先使用Python-Matplotlib进行图表绘制,首先要解决的就是设计出MATLAB的默认colormap-parula。这里可以自行进行颜色设计,也可以通过小编分享的colormaps.py文件进行获取(获取方式见文末)。

首先,我们使用默认的Matplotlib默认的colormap进行绘制,如下:

代码语言:javascript
复制
import matplotlib.pyplot as plt
max_v = band1.max()
min_v = band1.min()

fig,ax = plt.subplots(figsize=(5,4),dpi=100,facecolor="w")
ax.imshow(band1)
pcm = ax.imshow(band1)
fig.colorbar(pcm,ax=ax,aspect=10)

Python-matplotlib默认colormap

接下来,我们使用colormaps.py文件中的parula颜色系进行绘制,如下:

代码语言:javascript
复制
import matplotlib.pyplot as plt
from colormaps import parula
cmap = parula
fig,ax = plt.subplots(figsize=(5,4),dpi=100,facecolor="w")
pcm = ax.imshow(band1,cmap=cmap,)
fig.colorbar(pcm,ax=ax,aspect=10)

Python-matplotlib parula colormap

注意:大家可能发现,这里使用ax.imshow() 方法进行绘制,因为我们所获取的数据为二维数组格式。我们下期在使用(X,Y,Z)格式的数据进行绘制。

图表美化

接下来我们对已经绘制的图表结果进行优化,所使用的方法我们在之前的直播中也说了很多遍,具体绘制方法如下:

代码语言:javascript
复制
import matplotlib.pyplot as plt
from colormaps import parula

plt.rcParams["font.family"] = "Times New Roman"
cmap = parula

fig,ax = plt.subplots(figsize=(5,4),dpi=100,facecolor="w")
pcm = ax.imshow(band1,cmap=cmap,vmax=max_v,vmin=min_v)
ax.tick_params(labelsize=20)
ax.set_xticks(np.arange(0, 40, step=10))
ax.set_yticklabels(labels = [-10, 40, 30, 20, 10])
for text in ax.get_xticklabels()+ax.get_yticklabels():
    text.set_fontweight("bold")
ax.set_xlabel("longitude",fontsize=22,fontweight="bold")
ax.set_ylabel("latitude",fontsize=22,fontweight="bold")
print(ax.get_yticks())
print(ax.get_xticks())

cb = fig.colorbar(pcm,ax=ax,aspect=10)
#cb.outline.set_visible(False)
cb.ax.tick_params(direction="in",labelsize=15)
for t in cb.ax.get_yticklabels():
     t.set_fontweight("bold")
# 添加文本信息
ax.text(.5,1.04,"Albedo01",transform = ax.transAxes,fontsize=20,fontweight="bold",ha="center",va="center")

Albedo01

「注意」:这里的经纬度数据只是对点数进行计数,使用:

代码语言:javascript
复制
ax.set_yticklabels(labels = [-10, 40, 30, 20, 10])

进行图表刻度的自定义设置。我们再来看看其他维度数据的可视化结果:

Tbb_11

SAZ

此外,我们也使用了Matplotlib的Spectral_r颜色系进行绘制,结果如下:

SOA with Spectral_r

总结

今天的推文小编主要介绍了:

  • NC网格数据的读取;
  • MATLAB默认parula颜色系的Matplotlib绘制;
  • Matplotlib的colorbar的定制化绘制。

接下来的推文中,小编将使用pcolormesh() 和contour() 方法进行空间(X,Y,Z)学术图表的绘制。

参考资料

[1]

Python-netCDF4官网: http://unidata.github.io/netcdf4-python/。

喜欢就点个 在看 呗 👇

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataCharm 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何找到可替代的数据及处理?
    • Python-netCDF4库处理nc数据
    • Python/R如何使用MATLAB的colormap?
      • 获取parula颜色系
        • 图表美化
        • 总结
          • 参考资料
          相关产品与服务
          云直播
          云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档