专栏 / 为matplotlib创建自定义colormap

为matplotlib创建自定义colormap

2020年07月10日 06:08 --阅读 · --喜欢 · 二三三土
粉丝: 557 文章: 1

朋友们在用Python上画图的时候,讲究点必然是需要为数据点添加合适的颜色的。

先上一个简单的示例数据,接下来的例子我都只画散点图(scatter)啦。

随便生成一百个点的x和y轴坐标

一般来说 (我只知道) 我们有两种给点上色的情况:


明确知道每个点应该是什么颜色

我一时半会儿能想到的一个应用场景是:

在对数据集做了聚类,获得了对每一个点的类别标签(label of clustering)后,然后我们希望把这个标签通过颜色体现在图中。

不过这次准备的示例数据好像不适合做聚类什么的…

那我们就说,我认为坐标为奇数的点都该是红的,坐标是偶数的点都该是蓝的~

为此你需要准备一个列表(或者numpy.ndarray或者pandas.core.series.Series之类的),里面是“红蓝红蓝红蓝…”,然后把这个列表交给“color”这一参数。

用示例数据画散点图,设置颜色,最后显示
通过对每个点设置对应颜色的效果

(当然你也可以直接给一个代表颜色的字符串给“color”,这样同一行命令里涉及到的所有点都是同一个颜色;然后再画第二批点,给他们全部设置另一种颜色。)

利用颜色体现数据点的其他连续值属性

小标题稍微有点没说人话…“连续值”(continuous)这里是说“离散值”(discrete)和“类别值”(categorical)的相对概念,也就是说体现这种属性的数字,他不表示“1号”“2号”这样的整数,而是“0.23333mL”“2.3333333m”这样的精确数值。这里我专业上有个很典型的应用场景:

生物信息学中,当我们获得一组样品的基因表达量矩阵后,我们通常会通过降维算法(如PCA)来实现数据的可视化,从而直观观察样品点之间的距离关系。此时我们会希望通过数据点的颜色来体现某一目的基因的表达量高低,以此直观地了解该基因在不同样品中的表达情况。

这是我们需要做的是,把包含了这样数值的一维列表(或者类似的迭代器)交给“c”这个参数,这样Matplotlib便会通过渐变色的形式为你输入的值分配合适的颜色。Matplotlib自带了很多配色方案,我们可以通过”cmap“这一参数来进行选择。

随便搞一份连续值“c”,重画张图设置上颜色,再选个名字好听的配色
萌萌的分段上色

对不起例子不好,如果不设置“cmap”,默认配色是这样的:

最大值黄色,最小值紫色,中间渐变

总之Matplotlib有超多的配色方案,你可以运行“dir(matplotlib.cm)”来看看都有些啥。

我就是想自定义超多颜色就是不想用别人设好的

我就是小标题里这种人。来,点 这里 。大概就是我自己写了个函数,你可以输入你想要的颜色和渐变区间,他会返回一个Matplotlib.colors.ListedColormap实例,画图时你只需把这个实例交给“cmap”参数,就可以看到想要的配色啦。

引入我写的函数,创立一个三等分配色,和另一个按比例乱分的四色配色,各拿来画张子图

颜色正是正了点,但我自由了


原文上传于我的个人博客: Create Colormap (cmap) for Matplotlib 复制示例代码去那边。

投诉或建议
苹果灵动岛新增电子宠物和弹球游戏,设计理念值得学习,但能否保持新鲜感?
苹果灵动岛新增电子宠物和弹球游戏,设计理念值得学习,但能否保持新鲜感?近日,苹果公司为其最新的iPhone设备灵动岛引入了新的功能,包括电子宠物和弹球游戏。这一举动引发了广大用户的关注和讨论。首先,电子宠物功能的加入让用户可以选择自己喜欢的动物,宠物会在灵动岛周围踱步。即使在没有药丸的iPhone设备上,用户也可以将其设置为锁屏,让灵动岛成为宠物的家园。除此之外,设计师还专门为灵动岛设计了一个弹球游戏。用户可以将灵动岛的一部分设置为固定的反弹板,下面再对应一个活动的反弹板,有点类似于打乒乓球。这个游戏的创