Python海洋专题四之水深地图图像修饰
海洋与大气科学
上期会修改画布大小、坐标轴字体
没有对数据本身进行修改
本期内容
1:修改colormap!
2:倒置colormap
3:加上colorbar、调整其显示位置和字体大小
1:修改colormap
from palettable.cartocolors.sequential import DarkMint_4
cmap=DarkMint_4.mpl_colormap
注释:
函数包:palettable下面有16大类Colormap,共计1587小类Colormap,合计上万种单颜色可供使用。
palettable.cartocolors.divergingpalettable.cartocolors.qualitativepalettable.cartocolors.sequentialpalettable.cmocean.divergingpalettable.cmocean.sequentialpalettable.colorbrewer.divergingpalettable.colorbrewer.qualitativepalettable.colorbrewer.sequentialpalettable.lightbartlein.divergingpalettable.lightbartlein.sequentialpalettable.scientific.divergingpalettable.scientific.sequential
palettable.matplotlib
palettable.mycarta
palettable.tableaupalettable.wesanderson
palettable的函数包随意展示几张图片
结果展示
2:倒置colormap
有时候觉得colormap反过来好看:
Palettable这个函数包不好整,最终找到一个写了函数的整好了。
函数在全文代码中展示!此处展示效果:
结果展示
上图是直接使用函数包,下图使用函数给倒置过来。
还不错哈。
3:加上colorbar、调整其显示位置
和字体大小
position=fig.add_axes([0.15, 0.05, 0.7, 0.03])#位置[左,下,右,上]
cb=plt.colorbar(im,cax=position,orientation=‘horizontal’)#方向
结果如图
参考文献及其在本文中的作用
1:Palettable (jiffyclub.github.io);
2:在matplotlib中自定义colormap - 知乎 (zhihu.com)
3:调色板界的“扛把子”–palettable - 知乎 (zhihu.com)
1、2和3的作用:更改图像colormap(使用自己函数包和python自带函数包)。
3:关于python:matplotlib中的反向颜色图 | 码农家园 (codenong.com)
其作用:倒置colormap函数包。
4:对matplotlib改变colorbar位置和方向的方法详解_python_脚本之家 (jb51.net)
其作用:设置colorbar显示位置和方向。
5:解决python画图中colorbar设置刻度和标签字体大小_python colorbar自定义刻度-CSDN博客
其作用:设置colorbar的字体大小。
往期推荐
【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件
【python海洋专题二】读取水深nc文件并水深地形图
【python海洋专题三】图像修饰之画布和坐标轴
全文代码
# -*- coding: utf-8 -*-
# %%
# Importing related function packages
import pandas as pd
# import os
# from PIL import Image
import matplotlib.pyplot as plt # https://matplotlib.org/
import numpy as np
from netCDF4 import Dataset
import matplotlib as mpl
# import palettes
from palettable.cartocolors.sequential import DarkMint_7
from pylab import *
def reverse_colourmap(cmap, name='my_cmap_r'):
reverse = []
k = []
for key in cmap._segmentdata:
k.append(key)
channel = cmap._segmentdata[key]
data = []
for t in channel:
data.append((1 - t[0], t[2], t[1]))
reverse.append(sorted(data))
LinearL = dict(zip(k, reverse))
my_cmap_r = mpl.colors.LinearSegmentedColormap(name, LinearL)
return my_cmap_r
# read data
a = Dataset('D:\pycharm_work\data\scs_etopo.nc')
print(a)
lon = a.variables['lon'][:]
lat = a.variables['lat'][:]
ele = a.variables['elevation'][:]
# plot figure
# %% 图一
fig = plt.figure(dpi=300, figsize=(2, 2), facecolor='w', edgecolor='blue')
mngr = plt.get_current_fig_manager() # 获取当前figure manager
mngr.window.wm_geometry("+58+51") # 调整窗口在屏幕上弹出的位置
ax = fig.add_axes([0.08, 0.08, 0.85, 0.85]) # [距离左边,下边,坐标轴宽度,坐标轴高度] 范围(0, 1)
# 改变文字大小参数-fontsize
plt.xticks(np.arange(105, 125, 2), fontsize=4)
plt.yticks(np.arange(0, 25, 2), fontsize=4)
plt.contourf(lon, lat, ele[:, :], cmap=DarkMint_7.mpl_colormap)
plt.show()
from palettable.cmocean.diverging import Delta_4
# %% 图二
fig = plt.figure(dpi=300, figsize=(2, 2), facecolor='w', edgecolor='blue')
mngr = plt.get_current_fig_manager() # 获取当前figure manager
mngr.window.wm_geometry("+58+51") # 调整窗口在屏幕上弹出的位置
ax = fig.add_axes([0.08, 0.08, 0.85, 0.85]) # [距离左边,下边,坐标轴宽度,坐标轴高度] 范围(0, 1)
# 改变文字大小参数-fontsize
plt.xticks(np.arange(105, 125, 2), fontsize=4)
plt.yticks(np.arange(0, 25, 2), fontsize=4)
plt.contourf(lon, lat, ele[:, :], cmap=Delta_4.mpl_colormap)
plt.show()
from palettable.colorbrewer.sequential import GnBu_9
# %% 图三
fig = plt.figure(dpi=300, figsize=(2, 2), facecolor='w', edgecolor='blue')
mngr = plt.get_current_fig_manager() # 获取当前figure manager
mngr.window.wm_geometry("+58+51") # 调整窗口在屏幕上弹出的位置
ax = fig.add_axes([0.08, 0.08, 0.85, 0.85]) # [距离左边,下边,坐标轴宽度,坐标轴高度] 范围(0, 1)
# 改变文字大小参数-fontsize
plt.xticks(np.arange(105, 125, 2), fontsize=4)
plt.yticks(np.arange(0, 25, 2), fontsize=4)
plt.contourf(lon, lat, ele[:, :], cmap=GnBu_9.mpl_colormap)
plt.show()
cmap = GnBu_9.mpl_colormap
cmap_r = reverse_colourmap(cmap)
# %% 图四
fig = plt.figure(dpi=300, figsize=(2, 2), facecolor='w', edgecolor='blue')
mngr = plt.get_current_fig_manager() # 获取当前figure manager
mngr.window.wm_geometry("+58+51") # 调整窗口在屏幕上弹出的位置
ax = fig.add_axes([0.08, 0.08, 0.85, 0.85]) # [距离左边,下边,坐标轴宽度,坐标轴高度] 范围(0, 1)
# 改变文字大小参数-fontsize
plt.xticks(np.arange(105, 125, 2), fontsize=4)
plt.yticks(np.arange(0, 25, 2), fontsize=4)
plt.contourf(lon, lat, ele[:, :], cmap=cmap_r)
plt.show()
#%% 图五
fig = plt.figure(dpi=300, figsize=(2, 2), facecolor='w', edgecolor='blue')
mngr = plt.get_current_fig_manager() # 获取当前figure manager
mngr.window.wm_geometry("+58+51") # 调整窗口在屏幕上弹出的位置
ax = fig.add_axes([0.08, 0.15, 0.85, 0.84]) # [距离左边,下边,坐标轴宽度,坐标轴高度] 范围(0, 1)
# 改变文字大小参数-fontsize
plt.xticks(np.arange(105, 125, 2), fontsize=4)
plt.yticks(np.arange(0, 25, 2), fontsize=4)
plt.contourf(lon, lat, ele[:, :], cmap=cmap_r)
# ------tick向内
tick_params(direction='in')
# -------colorbar调整
position = fig.add_axes([0.15, 0.05, 0.7, 0.03])#位置[左,下,右,上]
cb = plt.colorbar(label="depth", cax=position, orientation='horizontal')#方向
cb.ax.tick_params(labelsize=4) #设置colorbar刻度字体大小。
# ------tick向内
tick_params(direction='in')
plt.show()
# %% 图六
fig = plt.figure(dpi=300, figsize=(2.2, 2), facecolor='w', edgecolor='blue')
mngr = plt.get_current_fig_manager() # 获取当前figure manager
mngr.window.wm_geometry("+58+51") # 调整窗口在屏幕上弹出的位置
ax = fig.add_axes([0.06, 0.08, 0.75, 0.85]) # [距离左边,下边,坐标轴宽度,坐标轴高度] 范围(0, 1)
# 改变文字大小参数-fontsize
plt.xticks(np.arange(105, 125, 2), fontsize=4)
plt.yticks(np.arange(0, 25, 2), fontsize=4)
plt.contourf(lon, lat, ele[:, :], cmap=cmap_r)
# ------tick向内
tick_params(direction='in')
# -------colorbar调整
position = fig.add_axes([0.83, 0.08, 0.03, 0.85])#位置[左,下,右,上]
cb = plt.colorbar(label="depth", cax=position, orientation='vertical')#方向
cb.ax.tick_params(labelsize=4) #设置colorbar刻度字体大小。
# ------tick向内
tick_params(direction='in')
plt.show()
图片