Matplotlib 制定自定义颜色序列

Matplotlib 制定自定义颜色序列

作为一个在 Python 数据可视化领域中使用最广泛的库之一,Matplotlib 提供了众多优秀的绘图功能和 API。在绘图过程中,颜色选择也是非常关键的。Matplotlib 默认提供的颜色选项为一定程度上能够满足大多数需求。但是,在某些情况下,默认的颜色选项并不能被很好地使用,因此本文将介绍如何通过修改 Matplotlib 默认的颜色序列,以提高我们的数据可视化效果。

阅读更多:Matplotlib 教程

改变默认颜色序列

Matplotlib 有一个名为 colormap 的对象,它是一个映射,将一系列数值映射到彩虹色或任何其他颜色。

例如,我们可以使用以下命令查看可用的颜色序列:

import matplotlib.pyplot as plt
import numpy as np

print(plt.colormaps())

输出如下:

['Accent', 'Accent_r', 'Blues', 'Blues_r', 'BrBG', 'BrBG_r', 'BuGn', 'BuGn_r', 'BuPu', 'BuPu_r', 'CMRmap', 'CMRmap_r', 'Dark2', 'Dark2_r', 'GnBu', 'GnBu_r', 'Greens', 'Greens_r', 'Greys', 'Greys_r', 'OrRd', 'OrRd_r', 'Oranges', 'Oranges_r', 'PRGn', 'PRGn_r', 'Paired', 'Paired_r', 'Pastel1', 'Pastel1_r', 'Pastel2', 'Pastel2_r', 'PiYG', 'PiYG_r', 'PuBu', 'PuBuGn', 'PuBuGn_r', 'PuBu_r', 'PuOr', 'PuOr_r', 'PuRd', 'PuRd_r', 'Purples', 'Purples_r', 'RdBu', 'RdBu_r', 'RdGy', 'RdGy_r', 'RdPu', 'RdPu_r', 'RdYlBu', 'RdYlBu_r', 'RdYlGn', 'RdYlGn_r', 'Reds', 'Reds_r', 'Set1', 'Set1_r', 'Set2', 'Set2_r', 'Set3', 'Set3_r', 'Spectral', 'Spectral_r', 'Wistia', 'Wistia_r', 'YlGn', 'YlGnBu', 'YlGnBu_r', 'YlGn_r', 'YlOrBr', 'YlOrBr_r', 'YlOrRd', 'YlOrRd_r', 'afmhot', 'afmhot_r', 'autumn', 'autumn_r', 'binary', 'binary_r', 'bone', 'bone_r', 'brg', 'brg_r', 'bwr', 'bwr_r', 'cividis', 'cividis_r', 'cool', 'cool_r', 'coolwarm', 'coolwarm_r', 'copper', 'copper_r', 'crest', 'crest_r', 'cubehelix', 'cubehelix_r', 'flag', 'flag_r', 'flare', 'flare_r', 'gist_earth', 'gist_earth_r', 'gist_gray', 'gist_gray_r', 'gist_heat', 'gist_heat_r', 'gist_ncar', 'gist_ncar_r', 'gist_rainbow', 'gist_rainbow_r', 'gist_stern', 'gist_stern_r', 'gist_yarg', 'gist_yarg_r', 'gnuplot', 'gnuplot2', 'gnuplot2_r', 'gnuplot_r', 'gray', 'gray_r', 'hot', 'hot_r', 'hsv', 'hsv_r', 'icefire', 'icefire_r', 'inferno', 'inferno_r', 'jet', 'jet_r', 'magma', 'magma_r', 'mako', 'mako_r', 'nipy_spectral', 'nipy_spectral_r', 'ocean', 'ocean_r', 'pink', 'pink_r', 'plasma', 'plasma_r', 'prism','prism_r', 'rainbow', 'rainbow_r', 'rocket', 'rocket_r', 'seismic', 'seismic_r', 'spring', 'spring_r', 'summer', 'summer_r', 'tab10', 'tab10_r', 'tab20', 'tab20_r', 'tab20b', 'tab20b_r', 'tab20c', 'tab20c_r', 'terrain', 'terrain_r', 'turbo', 'turbo_r', 'twilight', 'twilight_r', 'twilight_shifted', 'twilight_shifted_r', 'viridis', 'viridis_r', 'vlag', 'vlag_r', 'winter', 'winter_r']

Matplotlib 默认使用 'viridis' 这个颜色序列作为其颜色选项,可以使用如下代码设置默认的颜色序列:

plt.rcParams['axes.prop_cycle'] = plt.cycler(color=plt.cm.tab10.colors)

这个特定的例子使用了 'tab10' 颜色序列,但是也可以使用其他颜色序列,比如 'Dark2''tab20''Set2' 等。

自定义颜色序列

如果你需要一种具有特定颜色的颜色序列,Matplotlib 还允许你创建自己的颜色序列。其中一种创建自定义颜色序列的方法是使用 cycler 类,下面是一个使用 cycler 类创建自定义颜色序列的示例:

from cycler import cycler

custom_cycler = (cycler(color=['#4285F4', '#DB4437', '#F4B400', '#0F9D58']) +
                 cycler(linestyle=['-', '--', '-.', ':']))

plt.rcParams['axes.prop_cycle'] = custom_cycler

使用上述代码,我们可以得到一个自定义的颜色序列,其中颜色从 Google 的标准色板中来,并指定了不同的线条样式。如果你的绘图需要与特定的品牌或企业标准配色方案相匹配,这将非常有用。

手动循环获取颜色

在某些情况下,我们需要在程序中针对特定的数据项指定颜色。这时就需要我们获取一个序列中的颜色进行渲染。Matplotlib 有一个内置的 cycler,可以用来循环获取特定数目的颜色。这种循环获取颜色的方式,可以用来对不同的曲线、柱状图、等高线、标记点等进行相应的颜色上色。

下面是一个使用内置的 cycler 进行颜色循环的示例:

prop_cycle = plt.rcParams['axes.prop_cycle']
colors = prop_cycle.by_key()['color']

for i, color in enumerate(colors):
    print(f"Color {i}: {color}")

上述代码会输出一个 Matplotlib 默认的颜色循环中的颜色列表。我们可以使用这个颜色列表来针对具体的数据项进行特定颜色的指定。

使用 Seaborn 调色板

Seaborn 库是一个建立在 Matplotlib 之上的高度可视化的库。其中,Seaborn 提供了一些漂亮的可视化效果和更好的颜色选项。如果你喜欢 Seaborn 的一些颜色选项,就可以在使用 Matplotlib 做数据可视化时引入 Seaborn 的颜色映射。

可以使用以下代码进行 Seaborn 调色板的引入:

import seaborn as sns

sns.set_palette("husl", 8)

sns.set_palette() 函数使用 Seaborn 调色板设置 Matplotlib 绘图的颜色。在上面的示例中,我们选择了 Seaborn 中的 'husl' 颜色序列,同时将其限制在了 8 种不同的颜色中。

总结

本文介绍了如何改变Matplotlib 默认的颜色序列,以及如何手动循环获取颜色和使用 Seaborn 调色板。颜色的选择对于数据可视化非常关键,好的颜色可以让图表更具可读性和美观性。在实际应用中,我们可以根据需要选择适合自己的颜色序列,以达到更好的可视化效果。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程