Matplotlib 颜色选择与应用:全面指南

Matplotlib 颜色选择与应用:全面指南

参考:matplotlib colors select

Matplotlib 是 Python 中最流行的数据可视化库之一,它提供了丰富的颜色选择和应用方式,使得我们能够创建出美观、专业的图表。本文将全面介绍 Matplotlib 中的颜色选择和应用技巧,帮助你更好地掌握这一强大工具。

1. Matplotlib 中的颜色表示方法

在 Matplotlib 中,有多种方式来表示颜色。了解这些表示方法是正确使用颜色的基础。

1.1 颜色名称

Matplotlib 支持使用预定义的颜色名称来指定颜色。这是最简单直观的方法。

import matplotlib.pyplot as plt

plt.figure(figsize=(8, 6))
plt.plot([1, 2, 3, 4], [1, 4, 2, 3], color='red', label='how2matplotlib.com')
plt.title('Using Color Name')
plt.legend()
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

在这个例子中,我们使用 ‘red’ 作为颜色名称来设置线条颜色。Matplotlib 支持多种常见的颜色名称,如 ‘blue’、’green’、’yellow’ 等。

1.2 RGB 元组

RGB(红、绿、蓝)是另一种常用的颜色表示方法。在 Matplotlib 中,可以使用 0 到 1 之间的浮点数元组来表示 RGB 颜色。

import matplotlib.pyplot as plt

plt.figure(figsize=(8, 6))
plt.plot([1, 2, 3, 4], [1, 4, 2, 3], color=(0.5, 0.1, 0.5), label='how2matplotlib.com')
plt.title('Using RGB Tuple')
plt.legend()
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子中,我们使用 (0.5, 0.1, 0.5) 来表示一种紫色。每个数值分别代表红、绿、蓝的强度。

1.3 十六进制颜色代码

十六进制颜色代码是网页设计中常用的颜色表示方法,Matplotlib 也支持这种格式。

import matplotlib.pyplot as plt

plt.figure(figsize=(8, 6))
plt.plot([1, 2, 3, 4], [1, 4, 2, 3], color='#FF5733', label='how2matplotlib.com')
plt.title('Using Hex Color Code')
plt.legend()
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

在这个例子中,我们使用 ‘#FF5733’ 来表示一种橙红色。十六进制颜色代码以 ‘#’ 开头,后面跟着 6 个十六进制数字。

1.4 RGBA 值

RGBA 是 RGB 的扩展,增加了 Alpha 通道来控制透明度。在 Matplotlib 中,可以使用 4 元组来表示 RGBA 颜色。

import matplotlib.pyplot as plt

plt.figure(figsize=(8, 6))
plt.plot([1, 2, 3, 4], [1, 4, 2, 3], color=(0.1, 0.2, 0.5, 0.3), label='how2matplotlib.com')
plt.title('Using RGBA Value')
plt.legend()
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子中,(0.1, 0.2, 0.5, 0.3) 表示一种半透明的蓝色。最后一个值 0.3 表示 30% 的不透明度。

2. Matplotlib 内置颜色映射

Matplotlib 提供了丰富的内置颜色映射(colormap),这些颜色映射可以用于创建渐变色或者表示数据的连续变化。

2.1 使用内置颜色映射

import matplotlib.pyplot as plt
import numpy as np

data = np.random.rand(10, 10)
plt.figure(figsize=(8, 6))
plt.imshow(data, cmap='viridis')
plt.colorbar(label='how2matplotlib.com')
plt.title('Using Built-in Colormap')
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

在这个例子中,我们使用 ‘viridis’ 颜色映射来可视化一个随机数据矩阵。’viridis’ 是 Matplotlib 的默认颜色映射,它提供了从深蓝到黄的渐变色。

2.2 反转颜色映射

有时我们可能需要反转颜色映射的顺序。这可以通过在颜色映射名称后添加 ‘_r’ 来实现。

import matplotlib.pyplot as plt
import numpy as np

data = np.random.rand(10, 10)
plt.figure(figsize=(8, 6))
plt.imshow(data, cmap='viridis_r')
plt.colorbar(label='how2matplotlib.com')
plt.title('Using Reversed Colormap')
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子展示了如何使用反转的 ‘viridis’ 颜色映射。

2.3 离散颜色映射

某些情况下,我们可能需要使用离散的颜色而不是连续的渐变色。Matplotlib 提供了一些专门的离散颜色映射。

import matplotlib.pyplot as plt
import numpy as np

data = np.random.randint(0, 5, (10, 10))
plt.figure(figsize=(8, 6))
plt.imshow(data, cmap='Set3')
plt.colorbar(label='how2matplotlib.com')
plt.title('Using Discrete Colormap')
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子使用 ‘Set3’ 颜色映射来可视化一个包含离散值的数据矩阵。

3. 自定义颜色映射

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

3.1 从颜色列表创建颜色映射

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

colors = ['red', 'yellow', 'blue']
n_bins = 100
cmap = mcolors.LinearSegmentedColormap.from_list('how2matplotlib.com', colors, N=n_bins)

data = np.random.rand(10, 10)
plt.figure(figsize=(8, 6))
plt.imshow(data, cmap=cmap)
plt.colorbar(label='how2matplotlib.com')
plt.title('Custom Colormap from Color List')
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子展示了如何从一个颜色列表创建自定义颜色映射。我们使用 ‘red’、’yellow’ 和 ‘blue’ 三种颜色创建了一个新的颜色映射。

3.2 使用颜色映射注册器

如果你创建了一个自定义颜色映射并希望在多个图表中重复使用,可以将其注册到 Matplotlib 的颜色映射注册器中。

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

colors = ['purple', 'green', 'orange']
n_bins = 100
cmap = mcolors.LinearSegmentedColormap.from_list('how2matplotlib.com', colors, N=n_bins)
plt.register_cmap(cmap=cmap)

data = np.random.rand(10, 10)
plt.figure(figsize=(8, 6))
plt.imshow(data, cmap='how2matplotlib.com')
plt.colorbar(label='how2matplotlib.com')
plt.title('Using Registered Custom Colormap')
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

在这个例子中,我们创建了一个自定义颜色映射并将其注册为 ‘how2matplotlib.com’。然后我们可以像使用内置颜色映射一样使用这个自定义颜色映射。

4. 颜色循环

在绘制多条线或多个数据系列时,Matplotlib 会自动使用不同的颜色。这是通过颜色循环实现的。

4.1 默认颜色循环

import matplotlib.pyplot as plt

plt.figure(figsize=(8, 6))
for i in range(5):
    plt.plot([0, 1, 2, 3], [i, i**2, i**3, i**4], label=f'Series {i+1}')
plt.title('Default Color Cycle')
plt.legend()
plt.text(0.5, 10, 'how2matplotlib.com', fontsize=12)
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子展示了 Matplotlib 的默认颜色循环。每条线会自动分配一个不同的颜色。

4.2 自定义颜色循环

我们可以通过设置 plt.rcParams['axes.prop_cycle'] 来自定义颜色循环。

import matplotlib.pyplot as plt
import cycler

custom_cycler = cycler.cycler(color=['c', 'm', 'y', 'k'])
plt.rcParams['axes.prop_cycle'] = custom_cycler

plt.figure(figsize=(8, 6))
for i in range(5):
    plt.plot([0, 1, 2, 3], [i, i**2, i**3, i**4], label=f'Series {i+1}')
plt.title('Custom Color Cycle')
plt.legend()
plt.text(0.5, 10, 'how2matplotlib.com', fontsize=12)
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

在这个例子中,我们创建了一个包含青色、洋红色、黄色和黑色的自定义颜色循环。

5. 颜色标准化

在处理连续数据时,我们经常需要将数据值映射到颜色。Matplotlib 提供了多种颜色标准化方法来实现这一点。

5.1 线性标准化

线性标准化是最简单的标准化方法,它将数据线性映射到颜色空间。

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

data = np.random.rand(10, 10)
plt.figure(figsize=(8, 6))
plt.imshow(data, cmap='viridis', norm=Normalize(vmin=0, vmax=1))
plt.colorbar(label='how2matplotlib.com')
plt.title('Linear Normalization')
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子使用线性标准化将 0 到 1 之间的数据映射到 ‘viridis’ 颜色映射。

5.2 对数标准化

对于跨越多个数量级的数据,对数标准化通常更合适。

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

data = np.random.rand(10, 10) * 1000
plt.figure(figsize=(8, 6))
plt.imshow(data, cmap='viridis', norm=LogNorm(vmin=1, vmax=1000))
plt.colorbar(label='how2matplotlib.com')
plt.title('Logarithmic Normalization')
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子使用对数标准化来可视化跨越三个数量级的数据。

5.3 对称对数标准化

对于包含正负值的数据,对称对数标准化可能是一个好选择。

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

data = np.random.randn(10, 10) * 1000
plt.figure(figsize=(8, 6))
plt.imshow(data, cmap='RdBu_r', norm=SymLogNorm(linthresh=10, linscale=1, vmin=-1000, vmax=1000))
plt.colorbar(label='how2matplotlib.com')
plt.title('Symmetric Log Normalization')
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子使用对称对数标准化来可视化包含正负值的数据。

6. 颜色在不同类型图表中的应用

不同类型的图表可能需要不同的颜色应用策略。让我们看看如何在一些常见的图表类型中应用颜色。

6.1 散点图中的颜色应用

在散点图中,我们可以使用颜色来表示第三个维度的数据。

import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(100)
y = np.random.rand(100)
colors = np.random.rand(100)
sizes = 1000 * np.random.rand(100)

plt.figure(figsize=(8, 6))
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='viridis')
plt.colorbar(label='how2matplotlib.com')
plt.title('Color in Scatter Plot')
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子创建了一个散点图,其中点的颜色和大小都表示额外的信息。

6.2 柱状图中的颜色应用

在柱状图中,我们可以为每个柱子指定不同的颜色。

import matplotlib.pyplot as plt
import numpy as np

categories = ['A', 'B', 'C', 'D', 'E']
values = np.random.rand(5)
colors = plt.cm.Set3(np.linspace(0, 1, len(categories)))

plt.figure(figsize=(8, 6))
bars = plt.bar(categories, values, color=colors)
plt.title('Color in Bar Chart')
plt.text(2, 0.5, 'how2matplotlib.com', fontsize=12)
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子创建了一个柱状图,每个柱子都有不同的颜色。

6.3 饼图中的颜色应用

在饼图中,不同的颜色用于区分不同的部分。

import matplotlib.pyplot as plt

sizes = [15, 30, 45, 10]
labels = ['A', 'B', 'C', 'D']
colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99']

plt.figure(figsize=(8, 6))
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)
plt.axis('equal')
plt.title('Color in Pie Chart')
plt.text(-1.3, 1.3, 'how2matplotlib.com', fontsize=12)
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子创建了一个饼图,每个部分都有不同的颜色。

7. 颜色映射的选择原则

选择合适的颜色映射对于有效传达数据信息至关重要。以下是一些选择颜色映射的原则:

7.1 连续数据与离散数据

对于连续数据,应选择渐变的颜色映射,如 ‘viridis’、’plasma’ 或 ‘inferno’。对于离散数据,应选择具有明显区分的颜色映射,如 ‘Set1’、’Set2’ 或 ‘Set3’。

import matplotlib.pyplot as plt
import numpy as np

# 连续数据
continuous_data = np.random.rand(10, 10)
plt.figure(figsize=(12, 5))
plt.subplot(121)
plt.imshow(continuous_data, cmap='viridis')
plt.title('Continuous Data: viridis')
plt.colorbar(label='how2matplotlib.com')

# 离散数据
discrete_data = np.random.randint(0, 5, (10, 10))
plt.subplot(122)
plt.imshow(discrete_data, cmap='Set2')
plt.title('Discrete Data: Set2')
plt.colorbar(label='how2matplotlib.com')

plt.tight_layout()
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子展示了连续数据和离散数据分别使用不同颜色映射的效果。

7.2 感知均匀性

选择的颜色映射应该在感知上是均匀的,即相等的数据差异应该对应相等的感知颜色差异。’viridis’、’plasma’ 和 ‘inferno’ 等现代颜色映射在这方面表现良好。

7.3 色盲友好

选择的颜色映射应该对色盲人士友好。例如,’viridis’ 颜色映射就是专门设计用来适应各种类型的色盲的。

7.4 黑白打印友好

如果你的图表可能需要黑白打印,应选择在灰度下仍能清晰区分的颜色映射。

8. 高级颜色技巧

8.1 颜色混合

Matplotlib 允许我们混合颜色来创建新的颜色。

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

color1 = mcolors.to_rgba('red')
color2 = mcolors.to_rgba('blue')
mixed_color = tuple((c1 + c2) / 2 for c1, c2 in zip(color1, color2))

plt.figure(figsize=(8, 6))
plt.bar(['Color 1', 'Mixed', 'Color 2'], [1, 1, 1], color=[color1, mixed_color, color2])
plt.title('Color Mixing')
plt.text(0.5, 0.5, 'how2matplotlib.com', fontsize=12)
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子展示了如何混合红色和蓝色来创建一个新的颜色。

8.2 颜色透明度

透明度可以用来创建叠加效果或突出某些数据点。

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=(8, 6))
plt.fill_between(x, y1, alpha=0.3, color='red', label='Sin')
plt.fill_between(x, y2, alpha=0.3, color='blue', label='Cos')
plt.legend()
plt.title('Using Transparency')
plt.text(5, 0, 'how2matplotlib.com', fontsize=12)
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子使用透明度来创建两个曲线的填充区域,允许重叠部分的颜色混合。

8.3 颜色渐变

我们可以创建颜色渐变来表示连续变化的数据。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)
colors = plt.cm.viridis(np.linspace(0, 1, len(x)))

plt.figure(figsize=(8, 6))
for i in range(len(x) - 1):
    plt.plot(x[i:i+2], y[i:i+2], color=colors[i])
plt.title('Color Gradient')
plt.text(5, 0, 'how2matplotlib.com', fontsize=12)
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子创建了一条颜色随x轴变化的正弦曲线。

9. 颜色在数据分析中的应用

颜色不仅可以美化图表,还可以帮助我们更好地理解和分析数据。

9.1 热图

热图是一种使用颜色来表示矩阵数据的方法,非常适合可视化相关性矩阵。

import matplotlib.pyplot as plt
import numpy as np

data = np.random.rand(10, 10)
correlation_matrix = np.corrcoef(data)

plt.figure(figsize=(8, 6))
plt.imshow(correlation_matrix, cmap='coolwarm')
plt.colorbar(label='how2matplotlib.com')
plt.title('Correlation Heatmap')
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子创建了一个相关性热图,使用 ‘coolwarm’ 颜色映射来显示相关性强度。

9.2 等高线图

等高线图使用颜色来表示三维数据在二维平面上的投影。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

plt.figure(figsize=(8, 6))
cs = plt.contourf(X, Y, Z, cmap='viridis')
plt.colorbar(cs, label='how2matplotlib.com')
plt.title('Contour Plot')
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子创建了一个等高线图,展示了一个二元函数的值分布。

9.3 3D表面图

在3D表面图中,颜色可以用来表示高度或其他属性。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(X, Y, Z, cmap='viridis')
fig.colorbar(surf, label='how2matplotlib.com')
ax.set_title('3D Surface Plot')
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子创建了一个3D表面图,使用颜色来表示高度。

10. 颜色在特定领域的应用

不同的科学和工程领域可能有特定的颜色使用惯例。

10.1 地理信息系统 (GIS)

在GIS中,颜色通常用于表示地形高度、温度或降雨量等。

import matplotlib.pyplot as plt
import numpy as np

elevation = np.random.rand(100, 100) * 1000
plt.figure(figsize=(8, 6))
plt.imshow(elevation, cmap='terrain')
plt.colorbar(label='Elevation (m)')
plt.title('GIS: Terrain Elevation')
plt.text(20, 90, 'how2matplotlib.com', fontsize=12, color='white')
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子模拟了一个地形高程图,使用 ‘terrain’ 颜色映射来表示高度。

10.2 天文学

在天文学中,颜色常用于表示恒星的温度或星系的红移。

import matplotlib.pyplot as plt
import numpy as np

star_temps = np.random.normal(5000, 1000, 1000)
star_luminosity = np.random.normal(1, 0.5, 1000)

plt.figure(figsize=(8, 6))
plt.scatter(star_temps, star_luminosity, c=star_temps, cmap='coolwarm', alpha=0.7)
plt.colorbar(label='Temperature (K)')
plt.xlabel('Temperature (K)')
plt.ylabel('Luminosity (L/L_sun)')
plt.title('Astronomy: HR Diagram')
plt.text(3000, 2, 'how2matplotlib.com', fontsize=12)
plt.show()

Output:

Matplotlib 颜色选择与应用:全面指南

这个例子创建了一个简化的赫罗图(HR图),使用颜色来表示恒星温度。

结论

颜色是数据可视化中的一个强大工具。通过合理选择和应用颜色,我们可以更有效地传达信息,突出重要数据,并创建美观的图表。Matplotlib 提供了丰富的颜色选择和应用方法,使得我们能够灵活地处理各种数据可视化需求。

然而,使用颜色也需要谨慎。过度使用颜色可能会分散注意力或造成混淆。始终记住,颜色应该服务于数据和信息的清晰传达,而不是仅仅为了美观。

通过本文的学习,你应该已经掌握了 Matplotlib 中颜色选择和应用的基本知识和高级技巧。希望这些知识能够帮助你创建更加有效和吸引人的数据可视化作品。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程