Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >绘图技巧|如何创建自定义colormap

绘图技巧|如何创建自定义colormap

作者头像
bugsuse
发布于 2022-09-23 06:13:46
发布于 2022-09-23 06:13:46
1.3K00
代码可运行
举报
文章被收录于专栏:气象杂货铺气象杂货铺
运行总次数:0
代码可运行

之前悄悄送了一次可视化书籍,大家都留言催更可视化的推文,这就来了。之所以推这篇文章,是因为看到了一个不错的colormap,苦于没有源文件,只能截图然后识别出颜色,但识别效果看起来又没那么好了(如下图)。

左侧为看到卫星亮温观测colormap,右侧为识别出的colormap

整体上来看也还算可以,但达不到满意的效果,便想根据颜色自行创建一个,成图效果如下。好不好看暂且不说,这篇文章的主要目的是想说:绘图的时候颜色的选择不必拘泥于使用软件提供的colormap,应该根据想要强调的内容选择,比如这里想要强调亮温的不同温度区间,那么使用不同颜色就是一个很好的选择。但应该注意,对于相近区间的颜色应达到一定的对比度,要不然不太好区分。

实现后的效果图

绘图代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
((tbb.tbb_13.sortby('latitude')
            .sel(longitude=slice(105, 125), latitude=slice(20, 35)) - 273.15)
            .plot(vmin=-80, vmax=50, cmap=tbb_cmap2, cbar_kwargs=dict(ticks=np.arange(-80, 51, 10))))

颜色调整的代码没那么复杂,主要就是选择以及调整颜色的时候较为繁琐。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from matplotlib import cm
from matplotlib import colors

gray = cm.get_cmap('gray', 128)
blues = cm.get_cmap('blues', 128)
yellow = cm.get_cmap('orange1', 128)
orange = cm.get_cmap('orange5', 128)
red = cm.get_cmap('reds', 128)

g = list(gray(np.linspace(0, 1, 80)))
b = list(blues(np.linspace(0, 1, 80)))
y = list(yellow(np.linspace(0, 1, 50)))
o = list(orange(np.linspace(0, 1, 80)))
r = list(red(np.linspace(0, 1, 60)))

tbb_cmap2 = colors.ListedColormap((g + b[30:70:2] + y[40:10:-3] + o[30:50:2] + r[35:55:2])[::-1], N=130)

想着以后创建colormap有不少功能都有用,便把一些能想到的功能都实现了,分门别类写成了函数,比如离散点颜色、多颜色的合并组合等。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def discrete_cmap(N, base_cmap=None, start=0, stop=1):
    """Create an N-bin discrete colormap from the specified input map
    :param N(int): 
    :param base_cmap(string, colormap instance or None): colormap used to discrete
    :param start(int): start index of colormap, default 0 
    :param stop(int): stop index of colormap, default 1
    
    :return discrete colormap
    
    Note: 
      if base_cmap is a string or None, you can simply do return plt.cm.get_cmap(base_cmap, N), 
      it works for string, None, or a colormap instance.
      
    Ref:
      https://gist.github.com/jakevdp/91077b0cae40f8f8244a
    """
    from matplotlib import cm

    base = cm.get_cmap(base_cmap)
    color_list = base(np.linspace(start, stop, num=N, endpoint=True))
    cmap_name = base.name + str(N)
    
    return cm.colors.ListedColormap(color_list, color_list, N)

离散点colormap

实现完之后发现 proplot 已经有了这些函数而且功能上要更强大,几乎实现了平时用到的功能。

比如,更高阶一些的控制不同颜色的比例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import proplot as plot
import numpy as np
state = np.random.RandomState(51423)
data = state.rand(30, 30).cumsum(axis=1)

# Generate figure
fig, axs = plot.subplots([[0, 1, 1, 0], [2, 2, 3, 3]], axwidth=2.4, span=False)
axs.format(
    xlabel='xlabel', ylabel='ylabel',
    suptitle='Merging existing colormaps'
)

# SciVisColor examples
title2 = 'SciVisColor example with equal ratios'
cmap2 = plot.Colormap(
    'Greens1_r', 'Oranges1', 'Blues1_r', 'Blues6',
    name='SciVisColorEqual', save=True
)
title3 = 'SciVisColor example'
cmap3 = plot.Colormap(
    'Greens1_r', 'Oranges1', 'Blues1_r', 'Blues6',
    ratios=(1, 3, 5, 10), name='SciVisColor', save=True
)

# Plot examples
for ax, cmap, title in zip(axs, (cmap1, cmap2, cmap3), (title1, title2, title3)):
    m = ax.pcolormesh(data, cmap=cmap, levels=500)
    ax.colorbar(m, loc='b', locator='null', label=cmap.name)
    ax.format(title=title)

proplot的官方文档中给出了非常详细的使用说明,感兴趣的可以点击阅读原文去官方文档看看,这里就不细说了。

—END—

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

本文分享自 气象汇 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
气象人开发的高级科学绘图库Proplot!
Proplot对matplotlib进行了高度的封装,是一个高级绘图工具,其功能相当强大!而且融和了cartopy、basemap、xarray和pandas。看到这里这应该就是我一直想要的绘图工具了!
气象学家
2020/03/11
3.4K0
还在对Matplotlib繁琐的图层设置感到烦恼!?快来看看这个Python绘图工具包吧
是不是被matplotlib繁琐绘图属性设置搞得一脸懵?是不是因常常记不住某一个图层设置函数而被迫看又长又枯燥的API文档?又或者是不是在面对多个matplotlib子图时写了大量的循环代码来设置属性?最后还是不是希望只精通一个Python绘图包就可以把二维、空间等类型图表绘制方法都掌握??此外,还有好多无奈和吐槽,我不知道你们是不是这样?反正以上列出的几点就是我在使用matplotlib自定义绘制图表时最大的感触了,当然,本期推文不是来吐槽的,是来为大家提供好的解决方法的。下面就介绍下今天的主角-- ProPlot。说真的!当我刚开始发现这个包时:“嗯?不错,logo和matplotlib很像”,可是,当我在熟悉大多数和经常使用matplotlib绘图时,回来再看这个工具包时:“我ri,真香!!我之前干了啥?赶快用起来!”。总之一句话,如果上期推文 因为配图,SCI多次返修!?因为你还没发现这个Python科学绘图宝藏工具包 可以让你一步设置sci发表级别的配图格式的话,那本期推文将告诉你如何使用更少的代码实现繁琐的自定义绘图需求,当然,也是符合出版需求的配图,主要内容如下:
DataCharm
2021/02/22
1.4K0
还在对Matplotlib繁琐的图层设置感到烦恼!?快来看看这个Python绘图工具包吧
Python:Choosing Colormaps in Matplotlib
Choosing Colormaps in Matplotlib Matplotlib has a number of built-in colormaps accessible via matplotlib.colormaps. There are also external libraries that have many extra colormaps, which can be viewed in the Third-party colormaps section of the Matplotlib documentation. Here we briefly discuss how to choose between the many options. For help on creating your own colormaps, see Creating Colormaps in Matplotlib.
Twcat_tree
2023/10/16
2770
Python:Choosing Colormaps in Matplotlib
气象绘图cmap、cbar超详细版(附示例)
在matplotlib和cartopy中,其常见的绘图命令,若是带有颜色映射的collection(s)类,则基本都可以引入cmap与colorbar功能来分析数据。cmap即是颜色映射表,colorbar即是颜色分析色条,前者只起到对绘图对象上色的功能,后者实现色阶与数值的对应。
自学气象人
2022/11/02
18.9K0
气象绘图cmap、cbar超详细版(附示例)
使用 matplotlib 自定义Colormap
自定义 colormap 通常要使用 matplotlib.colors 模块中提供的函数和方法。 matplotlib.colors 是用来转换数字列表或颜色参数为 RGB 或 RGBA 的模块。RGB 和 RGBA 是具有3个或4个浮点数且数值在 [0, 1] 之间的序列。
bugsuse
2020/04/21
4.1K0
使用 matplotlib 自定义Colormap
深入探讨在Matplotlib中自定义颜色映射与标签的实用指南
Matplotlib是Python中广泛使用的绘图库,其强大的功能和灵活性使其成为数据可视化的首选工具之一。在数据可视化中,颜色映射和标签是至关重要的元素,能够显著增强图表的可读性和美观度。本文将深入探讨如何在Matplotlib中自定义颜色映射与标签,并提供详细的代码实例。
一键难忘
2024/10/01
6410
使用 matplotlib 绘制多彩的曲线
例如,norm = BoundaryNorm([-1, -0.5, 0.5, 1], 3),将[-1,-0.5],(-0.5,0.5),[0.5, 1]分别映射一种颜色。
iam002
2021/08/25
3.4K0
使用 matplotlib 绘制多彩的曲线
Matplotlib从入门到精通05-样式色彩秀芳华
参考: https://datawhalechina.github.io/fantastic-matplotlib/%E7%AC%AC%E4%B8%80%E5%9B%9E%EF%BC%9AMatplotlib%E5%88%9D%E7%9B%B8%E8%AF%86/index.html
IT从业者张某某
2023/10/16
3510
Matplotlib从入门到精通05-样式色彩秀芳华
ProPlot 基本语法及特点
科研论文配图多图层元素(字体、坐标轴、图例等)的绘制条件提出了更高要求,我们需要更改 Matplotlib 和 Seaborn 中的多个绘制参数,特别是在绘制含有多个子图的复杂图形时,容易造成绘制代码冗长。
timerring
2023/10/13
5680
ProPlot 基本语法及特点
密度图及山脊图绘图基础
Seaborn 的 kdeplot() 函数是 Python 中绘制密度图的方式之一,Matplotlib 在现阶段则没有具体的绘制密度图的函数,一般是结合 Scipy 库中的 gaussian_kde() 函数结果进行绘制。
timerring
2023/10/13
6750
密度图及山脊图绘图基础
直出SCI的Python绘图库
ProPlot绘图库(Python) 最近师兄推荐了一个Python的绘图库,感觉用这个库画的图都挺好看的。相对于原生的matplotlib,ProPlot画出来的库更适合用在论文里面。 同时,这个绘图库还可以绘制地理空间图,类似于Cartopy、Basemap。这个库就非常适合遥感人。下面我们就一起看看它的绘图效果吧! 折线图绘制 import proplot as pplt import numpy as np # Sample data cycle = pplt.Cycle('davos', rig
GIS与遥感开发平台
2022/12/03
1K0
直出SCI的Python绘图库
数据科学 IPython 笔记本 8.10 自定义颜色条
绘图图例标识离散点的离散标签。对于基于点,线条或区域颜色的连续标签,带标签的颜色条可能是一个很好的工具。在 Matplotlib 中,颜色条是一个单独的轴域,可以为绘图中的颜色含义提供见解。原书是黑白打印的,但是在线版本是彩色的,你可以在这里看到全彩的图形。我们首先为绘图配置笔记本,并导入我们将使用的函数:
ApacheCN_飞龙
2022/05/07
1.6K0
数据科学 IPython 笔记本 8.10 自定义颜色条
Matplotlib 学习笔记
在 matplotlib 中,整个图像为 Figure ,而一个 Figure 中可以有多个 axes。
zucchiniy
2020/05/22
5540
绘图技巧 | 超详细的Colorbar定制化绘制教程
本节提要:关于一些不常见的colorbar的仿制:弯曲与环形的colorbar、两端分离的colorbar、收缩colorbar的主副刻度、双刻度列colorbar、截取与拼接cmap、外部颜色引入cmaps与palettable库包、特别的格式定制、levels等距而colorbar刻度距离不等距、其他类型的伪colorbar、使刻度侧的框线与colorbar柱体分离。
DataCharm
2021/04/16
8.8K0
绘图技巧 | 超详细的Colorbar定制化绘制教程
python matplotlib各种绘图类型完整总结
plot([x], y, [fmt], [x2], y2, [fmt2], …, **kwargs)
Twcat_tree
2022/12/05
6.1K0
python matplotlib各种绘图类型完整总结
【中秋节快乐】Matplotlib:3d绘图合集
https://blog.csdn.net/m0_63834988/category_12441299.html
Qomolangma
2024/07/30
1920
【中秋节快乐】Matplotlib:3d绘图合集
空间转录组数据分析之niche“环”(ring)
追风少年i
2024/04/05
1640
空间转录组数据分析之niche“环”(ring)
【ProPlot库(二)】 动手画你的第一个气象图
学习气象少不了与等值线 (contour line; isoline) 打交道。proplot 以 matplotlib、cartopy 包作为基础,可使用 matplotlib 中的方法来绘制等值线图。下面介绍一个简单的绘制气温的例子:
自学气象人
2022/10/09
1.6K0
【ProPlot库(二)】 动手画你的第一个气象图
【ProPlot库】ProPlot3兰伯特投影-可添加刻度(三)
虽然 cartopy 下的 Plate Carrée 投影使用方便,但中纬度下使用 Lambert 投影能更好的呈现真实的地图。用一个正圆锥切于或割于球面,将地球面投影到圆锥面上,然后沿一母线展开成平面。下图是使用proplot绘制的最终效果:
自学气象人
2022/10/09
2.1K0
【ProPlot库】ProPlot3兰伯特投影-可添加刻度(三)
这么漂亮的图画,竟然是用NumPy画出来的?请跟我来,10行代码玩转NumPy!
NumPy也可以画图吗?当然!NumPy不仅可以画,还可以画得更好、画得更快!比如下面这幅画,只需要10行代码就可以画出来。若能整明白这10行代码,就意味着叩开了NumPy的大门。请打开你的Python IDLE,跟随我的脚步,一起来体验一下交互式编程的乐趣吧,看看如何用NumPy画图,以及用NumPy可以画出什么样的图画来。
数据森麟
2021/07/07
1.3K0
这么漂亮的图画,竟然是用NumPy画出来的?请跟我来,10行代码玩转NumPy!
推荐阅读
相关推荐
气象人开发的高级科学绘图库Proplot!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验