matplotlib色彩(colors)之图表数据系列默认配色(默认色彩循环)

很多人诟病matplotlib配色老套,那matplotlib默认的配色方案是什么?为什么没有设置颜色,图表数据系列显示的还有颜色?这也可能是最容易忽视的地方!

默认色彩循环

《matplotlib色彩(colors)之色彩基础知识》提到,默认色彩循环,Cn彩色定义由字符串C和1个非负整数构成,数字为默认色彩循环rcParams["axes.prop_cycle"]的索引,
rcParams["axes.prop_cycle"] (default: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']))数字超过9,对应的颜色索引为数字个位数索引,例如C101C1的取值相同。注意C必须为大写。

matplotlib大部分绘图函数、方法的颜色属性默认指向默认色彩循环,不同数据系列有不同颜色,超过10个数据系列,颜色则在这个10种颜色中循环使用。我们常常绘制的图表只有一个数据系列,因此,图表中的数据系列往往是蓝色。

下面以plot方法为例做几个实验来进行验证:

实验1

绘制了一条直线,根据直线的属性可知线条颜色为#1f77b4

import matplotlib.pyplot as plt

line = plt.plot([1, 1])
c = line[0].get_color()
plt.annotate(c, (0, 1))
plt.show()

在这里插入图片描述

实验2

绘制了20条直线,输出了直线的颜色,根据输出可知:前10条直线和后面10条直线的颜色是循环重复的。
在这里插入图片描述

import matplotlib.pyplot as plt

for i in range(20):
    line = plt.plot([i, i])
    c = line[0].get_color()
    plt.annotate(repr(i) + ":"+c, (0, i+0.1))
plt.show()

实验3

输出TABLEAU_COLORS可知,其颜色的取值与rcParams["axes.prop_cycle"]、上面实验中线条的默认颜色是一一致的。
在这里插入图片描述

import matplotlib.pyplot as plt
import matplotlib.colors as mcolors

tab10 = mcolors.TABLEAU_COLORS
for i,j in enumerate(tab10):
    plt.plot([i, i], c=j)
    plt.annotate(j+":"+tab10[j], (0, i+0.1))
plt.show()
### Matplotlib 配色方案设置 在 Matplotlib 中,可以通过多种方式来定义和应用配色方案。最常用的方法之一是通过 `colormap` 来实现色彩映射。 #### 使用预设的 colormap 设置颜色 Matplotlib 提供了一系列内置的 colormaps,可以方便地应用于图像显示和其他可视化操作中[^1]: ```python import numpy as np import matplotlib.pyplot as plt data = np.random.rand(10,10) plt.imshow(data, cmap='viridis') plt.colorbar() plt.show() ``` 这段代码展示了如何利用名为 'viridis' 的预置 colormap 对随机数据进行着色处理并展示出来。 #### 自定义离散型 color map 除了使用现成的 colormap 外,还可以创建自定义的颜色列表作为 colormap: ```python from matplotlib.colors import ListedColormap custom_colors = ['#FFAAAA', '#AAFFAA','#AAF0DD'] cmap_custom = ListedColormap(custom_colors) plt.scatter(np.random.rand(50), np.random.rand(50), c=np.random.randint(3,size=50), cmap=cmap_custom) plt.colorbar(ticks=[0,1,2], label='Custom Colors') plt.show() ``` 此示例说明了怎样构建一个由特定 RGB 值组成的 colormap 并将其用于绘制散点图中的不同类别标记上[^2]。 #### 应用连续渐变效果 对于需要平滑过渡的效果,则可以选择线性分段函数来自动生成具有渐变特性的 colormap: ```python from matplotlib.colors import LinearSegmentedColormap cdict = {'red': ((0.0, 0.25, .4), (0.3, 1.0, 1.0), (0.5, 1.0, 1.0), (1.0, 0.0, 0.0)), 'green': ((0.0, 0.0, 0.0), (0.25, 0.0, 0.5), (0.75, 1.0, 1.0), (1.0, 1.0, 1.0)), 'blue': ((0.0, 0.0, 0.0), (0.5, 0.5, 0.5), (1.0, 0.0, 0.0)) } my_cmap = LinearSegmentedColormap('my_colormap', cdict) plt.contourf([[i*j for j in range(10)]for i in range(10)], levels=range(-1,10), cmap=my_cmap) plt.colorbar(label="My Custom Colormap") plt.show() ``` 上述例子解释了如何基于给定的颜色变化规律设计出独特的 colormap,并应用于等高线填充图表之中.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值