Matplotlib 颜色列表:全面掌握图表配色技巧

Matplotlib 颜色列表:全面掌握图表配色技巧

参考:matplotlib colors list

MatplotlibPython 中最流行的数据可视化库之一,它提供了丰富的颜色选项,让用户能够创建出美观、专业的图表。本文将深入探讨 Matplotlib 中的颜色列表,帮助您全面掌握图表配色技巧,提升数据可视化效果。

1. Matplotlib 颜色基础

在开始探索 Matplotlib 的颜色列表之前,我们需要了解一些基本概念。Matplotlib 支持多种颜色表示方式,包括:

  1. 颜色名称字符串
  2. RGB 元组
  3. RGBA 元组
  4. 十六进制颜色代码

让我们通过一个简单的示例来了解这些表示方式:

import matplotlib.pyplot as plt

# 创建一个简单的折线图
plt.figure(figsize=(10, 6))
plt.plot([1, 2, 3, 4], [1, 4, 2, 3], color='red', label='红色线')
plt.plot([1, 2, 3, 4], [2, 3, 4, 1], color=(0, 1, 0), label='绿色线')
plt.plot([1, 2, 3, 4], [3, 2, 1, 4], color=(0, 0, 1, 0.5), label='半透明蓝色线')
plt.plot([1, 2, 3, 4], [4, 1, 3, 2], color='#FF00FF', label='洋红色线')

plt.title('Matplotlib 颜色示例 - how2matplotlib.com')
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.legend()
plt.show()

Output:

Matplotlib 颜色列表:全面掌握图表配色技巧

在这个示例中,我们使用了四种不同的颜色表示方式:
– ‘red’:颜色名称字符串
– (0, 1, 0):RGB 元组,表示绿色
– (0, 0, 1, 0.5):RGBA 元组,表示半透明的蓝色
– ‘#FF00FF’:十六进制颜色代码,表示洋红色

2. Matplotlib 内置颜色名称

Matplotlib 提供了一系列内置的颜色名称,这些名称易于记忆和使用。以下是一些常用的颜色名称:

  • 基本颜色:’red’, ‘green’, ‘blue’, ‘yellow’, ‘cyan’, ‘magenta’, ‘black’, ‘white’
  • 灰度:’gray’ 或 ‘grey’(后跟 0-1 之间的数字,如 ‘gray0.5’)
  • 其他颜色:’purple’, ‘orange’, ‘pink’, ‘brown’, ‘violet’, ‘indigo’ 等

让我们创建一个示例,展示这些内置颜色:

import matplotlib.pyplot as plt

colors = ['red', 'green', 'blue', 'yellow', 'cyan', 'magenta', 'black', 'white',
          'gray0.5', 'purple', 'orange', 'pink', 'brown', 'violet', 'indigo']

plt.figure(figsize=(12, 8))
for i, color in enumerate(colors):
    plt.bar(i, 1, color=color, label=color)

plt.title('Matplotlib 内置颜色示例 - how2matplotlib.com')
plt.xlabel('颜色')
plt.ylabel('值')
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
plt.show()

这个示例创建了一个条形图,展示了多种内置颜色。每个条形代表一种颜色,并在图例中显示颜色名称。

3. 自定义 RGB 和 RGBA 颜色

除了使用内置颜色名称,我们还可以通过 RGB 或 RGBA 值来自定义颜色。RGB 值表示红、绿、蓝三个颜色通道的强度,范围从 0 到 1。RGBA 则在 RGB 的基础上增加了 Alpha 通道,用于控制透明度。

以下是一个使用自定义 RGB 和 RGBA 颜色的示例:

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.figure(figsize=(10, 6))

# 使用 RGB 颜色
plt.plot(x, y1, color=(0.8, 0.2, 0.1), label='自定义红色')

# 使用 RGBA 颜色
plt.plot(x, y2, color=(0.1, 0.8, 0.2, 0.5), label='半透明绿色')

plt.title('自定义 RGB 和 RGBA 颜色示例 - how2matplotlib.com')
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.legend()
plt.grid(True)
plt.show()

Output:

Matplotlib 颜色列表:全面掌握图表配色技巧

在这个示例中,我们使用了自定义的 RGB 颜色 (0.8, 0.2, 0.1) 表示偏红色,以及 RGBA 颜色 (0.1, 0.8, 0.2, 0.5) 表示半透明的绿色。

4. 使用十六进制颜色代码

十六进制颜色代码是另一种常用的颜色表示方式。它使用 6 位十六进制数字来表示颜色,其中前两位表示红色,中间两位表示绿色,最后两位表示蓝色。

以下是一个使用十六进制颜色代码的示例:

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [23, 45, 56, 78, 32]

plt.figure(figsize=(10, 6))

# 使用十六进制颜色代码
plt.bar(categories, values, color='#4CAF50', edgecolor='#2E7D32', linewidth=2)

plt.title('使用十六进制颜色代码示例 - how2matplotlib.com')
plt.xlabel('类别')
plt.ylabel('值')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()

Output:

Matplotlib 颜色列表:全面掌握图表配色技巧

在这个示例中,我们使用了十六进制颜色代码 ‘#4CAF50′ 作为条形的填充颜色,’#2E7D32’ 作为边框颜色。这种方式允许我们精确控制颜色的每个分量。

5. Matplotlib 颜色映射(Colormaps)

颜色映射是 Matplotlib 中一个强大的功能,它允许我们将数值范围映射到颜色范围。Matplotlib 提供了多种内置的颜色映射,如 ‘viridis’、’plasma’、’inferno’、’magma’ 等。

以下是一个使用颜色映射的示例:

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.linspace(0, 10, 100)
y = np.linspace(0, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

plt.figure(figsize=(12, 8))

# 使用 'viridis' 颜色映射
plt.contourf(X, Y, Z, cmap='viridis')
plt.colorbar(label='值')

plt.title('Matplotlib 颜色映射示例 - how2matplotlib.com')
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.show()

Output:

Matplotlib 颜色列表:全面掌握图表配色技巧

这个示例创建了一个等高线填充图,使用 ‘viridis’ 颜色映射来表示 Z 值的变化。颜色条显示了值与颜色之间的对应关系。

6. 自定义离散颜色列表

有时我们需要为不同的数据系列指定一组特定的颜色。在这种情况下,我们可以创建一个自定义的颜色列表。

以下是一个使用自定义颜色列表的示例:

import matplotlib.pyplot as plt
import numpy as np

# 自定义颜色列表
custom_colors = ['#FF9999', '#66B2FF', '#99FF99', '#FFCC99', '#FF99CC']

# 生成数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [23, 45, 56, 78, 32]

plt.figure(figsize=(10, 6))

# 使用自定义颜色列表
plt.bar(categories, values, color=custom_colors)

plt.title('自定义离散颜色列表示例 - how2matplotlib.com')
plt.xlabel('类别')
plt.ylabel('值')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()

Output:

Matplotlib 颜色列表:全面掌握图表配色技巧

在这个示例中,我们定义了一个包含五种颜色的列表,并将这些颜色应用到条形图的每个条形上。这种方法允许我们精确控制每个数据系列的颜色。

7. 使用颜色循环

当我们需要为多个数据系列自动分配不同的颜色时,可以使用 Matplotlib 的颜色循环功能。默认情况下,Matplotlib 会自动循环使用一组预定义的颜色。

以下是一个使用颜色循环的示例:

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = x**2
y5 = x**3

plt.figure(figsize=(12, 8))

# 使用颜色循环
plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')
plt.plot(x, y3, label='tan(x)')
plt.plot(x, y4, label='x^2')
plt.plot(x, y5, label='x^3')

plt.title('Matplotlib 颜色循环示例 - how2matplotlib.com')
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.legend()
plt.grid(True)
plt.show()

Output:

Matplotlib 颜色列表:全面掌握图表配色技巧

在这个示例中,我们绘制了五条不同的曲线,Matplotlib 自动为每条曲线分配了不同的颜色。这种方法在处理多个数据系列时特别有用。

8. 使用 ColorBrewer 颜色方案

ColorBrewer 是一个专门为制图设计的颜色方案集合。Matplotlib 通过 plt.cm 模块提供了对 ColorBrewer 颜色方案的支持。这些方案包括定性、序列和发散三种类型,适用于不同的数据可视化需求。

以下是一个使用 ColorBrewer 颜色方案的示例:

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
categories = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
values = np.random.randint(10, 100, size=len(categories))

plt.figure(figsize=(12, 8))

# 使用 ColorBrewer 的 'Set3' 颜色方案
colors = plt.cm.Set3(np.linspace(0, 1, len(categories)))
plt.bar(categories, values, color=colors)

plt.title('ColorBrewer 颜色方案示例 - how2matplotlib.com')
plt.xlabel('类别')
plt.ylabel('值')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()

Output:

Matplotlib 颜色列表:全面掌握图表配色技巧

在这个示例中,我们使用了 ColorBrewer 的 ‘Set3’ 颜色方案,这是一个定性的颜色方案,适合用于表示不同的类别。

9. 颜色渐变

颜色渐变是一种强大的视觉效果,可以用来表示数据的连续变化。Matplotlib 提供了多种方法来创建颜色渐变效果。

以下是一个使用颜色渐变的示例:

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.figure(figsize=(12, 8))

# 创建颜色渐变
colors = plt.cm.viridis(np.linspace(0, 1, len(x)))

# 使用颜色渐变绘制散点图
plt.scatter(x, y, c=colors, s=50)

plt.title('颜色渐变示例 - how2matplotlib.com')
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.colorbar(label='颜色值')
plt.grid(True)
plt.show()

Output:

Matplotlib 颜色列表:全面掌握图表配色技巧

在这个示例中,我们使用 ‘viridis’ 颜色映射创建了一个颜色渐变,并将其应用到散点图中。每个点的颜色根据其在序列中的位置而变化,创造出一种连续变化的视觉效果。

10. 自定义颜色映射

虽然 Matplotlib 提供了许多内置的颜色映射,但有时我们可能需要创建自定义的颜色映射以满足特定需求。我们可以使用 LinearSegmentedColormapListedColormap 来创建自定义颜色映射。

以下是一个创建自定义颜色映射的示例:

import matplotlib.pyplot as plt
import matplotlibimport numpy as np
from matplotlib.colors import LinearSegmentedColormap

# 定义自定义颜色映射
colors = ['#FF0000', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF']
n_bins = 100
cmap = LinearSegmentedColormap.from_list('custom_cmap', colors, N=n_bins)

# 生成数据
x = np.linspace(0, 10, 100)
y = np.linspace(0, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

plt.figure(figsize=(12, 8))

# 使用自定义颜色映射
plt.contourf(X, Y, Z, cmap=cmap)
plt.colorbar(label='值')

plt.title('自定义颜色映射示例 - how2matplotlib.com')
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.show()

在这个示例中,我们创建了一个从红色到蓝色的自定义颜色映射,并将其应用到等高线填充图中。这种方法允许我们精确控制颜色映射的外观。

11. 颜色归一化

在某些情况下,我们可能需要将数据值映射到特定的颜色范围。Matplotlib 提供了多种归一化方法,如 NormalizeLogNormSymLogNorm 等,以帮助我们实现这一目标。

以下是一个使用颜色归一化的示例:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import Normalize

# 生成数据
x = np.linspace(0, 10, 100)
y = np.linspace(0, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.exp(-(X**2 + Y**2) / 20)

plt.figure(figsize=(12, 8))

# 创建归一化对象
norm = Normalize(vmin=0, vmax=1)

# 使用归一化对象
plt.contourf(X, Y, Z, cmap='viridis', norm=norm)
plt.colorbar(label='值')

plt.title('颜色归一化示例 - how2matplotlib.com')
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.show()

Output:

Matplotlib 颜色列表:全面掌握图表配色技巧

在这个示例中,我们使用 Normalize 对象将数据值限制在 0 到 1 的范围内,然后将其映射到 ‘viridis’ 颜色映射。这种方法可以帮助我们更好地控制颜色映射的范围。

12. 透明度和 Alpha 通道

透明度是一个重要的视觉属性,可以帮助我们在同一图表中显示多层数据。在 Matplotlib 中,我们可以通过设置 Alpha 值来控制透明度。

以下是一个使用透明度的示例:

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.figure(figsize=(12, 8))

# 使用不同的透明度
plt.fill_between(x, y1, alpha=0.3, color='red', label='sin(x) 区域')
plt.fill_between(x, y2, alpha=0.3, color='blue', label='cos(x) 区域')
plt.plot(x, y1, color='red', label='sin(x)')
plt.plot(x, y2, color='blue', label='cos(x)')

plt.title('透明度和 Alpha 通道示例 - how2matplotlib.com')
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.legend()
plt.grid(True)
plt.show()

Output:

Matplotlib 颜色列表:全面掌握图表配色技巧

在这个示例中,我们使用 fill_between 函数创建了两个半透明的填充区域,同时绘制了两条曲线。通过设置 alpha=0.3,我们可以看到两个区域的重叠部分。

13. 颜色循环和样式循环

除了颜色循环,Matplotlib 还提供了样式循环功能。我们可以同时使用颜色循环和样式循环来创建更丰富的视觉效果。

以下是一个结合颜色循环和样式循环的示例:

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = x**2
y5 = x**3

plt.figure(figsize=(12, 8))

# 使用颜色循环和样式循环
plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)', linestyle='--')
plt.plot(x, y3, label='tan(x)', linestyle=':')
plt.plot(x, y4, label='x^2', linestyle='-.')
plt.plot(x, y5, label='x^3', linestyle=(0, (3, 1, 1, 1)))

plt.title('颜色循环和样式循环示例 - how2matplotlib.com')
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.legend()
plt.grid(True)
plt.show()

Output:

Matplotlib 颜色列表:全面掌握图表配色技巧

在这个示例中,我们为每条曲线使用了不同的线型,同时 Matplotlib 自动为每条曲线分配了不同的颜色。这种组合可以帮助我们在同一图表中清晰地区分多个数据系列。

14. 颜色映射的离散化

有时我们可能希望将连续的颜色映射离散化为有限数量的颜色。Matplotlib 提供了 BoundaryNorm 类来实现这一功能。

以下是一个颜色映射离散化的示例:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import BoundaryNorm

# 生成数据
x = np.linspace(0, 10, 100)
y = np.linspace(0, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

# 定义离散化边界
levels = [-1, -0.5, 0, 0.5, 1]

plt.figure(figsize=(12, 8))

# 创建 BoundaryNorm 对象
norm = BoundaryNorm(levels, ncolors=plt.cm.viridis.N, clip=True)

# 使用离散化的颜色映射
plt.contourf(X, Y, Z, levels=levels, cmap='viridis', norm=norm)
plt.colorbar(label='值', ticks=levels)

plt.title('颜色映射离散化示例 - how2matplotlib.com')
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.show()

Output:

Matplotlib 颜色列表:全面掌握图表配色技巧

在这个示例中,我们将 ‘viridis’ 颜色映射离散化为 5 个区间。这种方法可以帮助我们更清晰地展示数据的分布情况。

15. 使用 Seaborn 调色板

Seaborn 是基于 Matplotlib 的统计数据可视化库,它提供了许多美观的调色板。我们可以在 Matplotlib 中使用 Seaborn 的调色板来增强图表的视觉效果。

以下是一个使用 Seaborn 调色板的示例:

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

# 设置 Seaborn 样式
sns.set_style("whitegrid")

# 生成数据
categories = ['A', 'B', 'C', 'D', 'E']
values = np.random.randint(10, 100, size=len(categories))

plt.figure(figsize=(12, 8))

# 使用 Seaborn 的 'husl' 调色板
colors = sns.color_palette("husl", len(categories))
plt.bar(categories, values, color=colors)

plt.title('使用 Seaborn 调色板示例 - how2matplotlib.com')
plt.xlabel('类别')
plt.ylabel('值')
plt.show()

Output:

Matplotlib 颜色列表:全面掌握图表配色技巧

在这个示例中,我们使用了 Seaborn 的 ‘husl’ 调色板来为条形图着色。Seaborn 提供了多种调色板选项,可以满足不同的可视化需求。

16. 颜色映射的反转

有时我们可能需要反转颜色映射的方向。Matplotlib 允许我们通过在颜色映射名称后添加 ‘_r’ 后缀来实现这一点。

以下是一个反转颜色映射的示例:

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.linspace(0, 10, 100)
y = np.linspace(0, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 8))

# 使用原始颜色映射
im1 = ax1.contourf(X, Y, Z, cmap='viridis')
ax1.set_title('原始 viridis 颜色映射 - how2matplotlib.com')
fig.colorbar(im1, ax=ax1, label='值')

# 使用反转的颜色映射
im2 = ax2.contourf(X, Y, Z, cmap='viridis_r')
ax2.set_title('反转的 viridis 颜色映射 - how2matplotlib.com')
fig.colorbar(im2, ax=ax2, label='值')

plt.tight_layout()
plt.show()

Output:

Matplotlib 颜色列表:全面掌握图表配色技巧

在这个示例中,我们创建了两个子图,分别使用原始的 ‘viridis’ 颜色映射和反转的 ‘viridis_r’ 颜色映射。这种方法可以帮助我们根据需要调整颜色映射的方向。

总结

通过本文,我们全面探讨了 Matplotlib 中的颜色列表和相关技巧。从基本的颜色表示方法到高级的颜色映射和自定义技巧,我们涵盖了许多重要的概念和实践示例。掌握这些技巧将帮助您创建更加美观、专业和富有表现力的数据可视化图表。

记住,颜色的选择不仅仅是美学问题,还关系到数据的可读性和解释性。在实际应用中,要根据数据的特性和目标受众来选择合适的颜色方案。同时,也要考虑到色盲友好的设计原则,确保您的可视化对所有人都是可访问的。

通过不断实践和探索,您将能够充分利用 Matplotlib 的颜色功能,创造出令人印象深刻的数据可视化作品。希望本文能为您的数据可视化之旅提供有价值的指导和灵感。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程