Matplotlib Colormaps

Matplotlib Colormaps

参考:Matplotlib Colormaps

Matplotlib 是一个非常流行的 Python 绘图库,用于创建各种类型的图表和可视化效果。在绘制图表时,颜色选择是至关重要的一环,而 Matplotlib 提供了一系列丰富的 colormap 供用户选择。Colormap 是一种从数据值到色彩值的映射方式,它可以帮助我们更直观地理解数据的分布和趋势。在本文中,我们将详细介绍 Matplotlib 中的 colormap,并演示如何使用它们来优化数据可视化效果。

1. 默认 Colormap

首先,让我们看一下 Matplotlib 中默认的 colormap。当我们不指定具体的 colormap 时,Matplotlib 会使用默认的 colormap。下面是一个简单的示例代码,展示了默认的 colormap 被应用在一组数据的散点图上:

import matplotlib.pyplot as plt
import numpy as np

# 数据
x = np.random.randn(1000)
y = np.random.randn(1000)

plt.scatter(x, y)
plt.show()

Output:

Matplotlib Colormaps

运行以上代码,我们可以看到一幅散点图,其中的散点颜色就是默认的 colormap 映射获得的。接下来,我们将进一步介绍如何选择和使用不同的 colormap。

2. Sequential Colormap

Sequential Colormap 是一种单一色调渐变的 colormap,常用于表示数据的顺序或程度。Matplotlib 中提供了多种 Sequential Colormap,如 ‘viridis’、’plasma’、’inferno’、’cividis’ 等。下面是一个例子,展示了 ‘viridis’ colormap 的应用:

import matplotlib.pyplot as plt
import numpy as np

# 数据
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)

plt.scatter(x, y, c=y, cmap='viridis')
plt.colorbar()
plt.show()

Output:

Matplotlib Colormaps

运行以上代码,我们可以看到一幅以 ‘viridis’ colormap 映射的散点图,其中数据点的颜色随 y 值的变化而变化。除了 ‘viridis’,我们还可以尝试其他的 Sequential Colormap,看看它们的效果。

3. Diverging Colormap

Diverging Colormap 是一种从两个不同颜色渐变到中间颜色的 colormap,适用于表示数据的对比和差异。Matplotlib 中提供了多种 Diverging Colormap,如 ‘coolwarm’、’seismic’、’bwr’、’PiYG’ 等。以下示例展示了 ‘coolwarm’ colormap 的应用:

import matplotlib.pyplot as plt
import numpy as np

# 数据
x = np.random.randn(1000)
y = np.random.randn(1000)

plt.scatter(x, y, c=x, cmap='coolwarm')
plt.colorbar()
plt.show()

Output:

Matplotlib Colormaps

运行以上代码,我们可以看到一幅以 ‘coolwarm’ colormap 映射的散点图,其中数据点的颜色随 x 值的正负变化而变化。尝试使用其他的 Diverging Colormap,感受不同颜色的对比效果。

4. Qualitative Colormap

Qualitative Colormap 是一种用于区分离散类别的 colormap,适用于分类数据的可视化。Matplotlib 中提供了多种 Qualitative Colormap,如 ‘tab10’、’Set1’、’Set2’、’Paired’ 等。下面是一个示例,展示了 ‘tab10’ colormap 的应用:

import matplotlib.pyplot as plt
import numpy as np

# 数据
x = np.random.randint(0, 10, 1000)
y = np.random.randint(0, 10, 1000)

plt.scatter(x, y, c=x, cmap='tab10')
plt.colorbar()
plt.show()

Output:

Matplotlib Colormaps

运行以上代码,我们可以看到一幅以 ‘tab10’ colormap 映射的散点图,其中数据点的颜色代表不同的类别。通过改变 Qualitative Colormap,可以获得不同的类别区分效果。

5. Custom Colormap

除了使用 Matplotlib 提供的内置 Colormap 外,我们还可以自定义 Colormap,以满足特定的可视化需求。我们可以通过定义颜色列表和映射函数来创建自己的 Colormap。下面是一个简单的示例,展示了如何创建一个自定义的 colormap:

import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap

# 自定义颜色列表
colors = [(0, 'red'), (0.5, 'green'), (1, 'blue')]

# 创建Colormap
cmap = LinearSegmentedColormap.from_list('custom_cmap', colors)

# 数据
x = np.random.randn(1000)
y = np.random.randn(1000)

plt.scatter(x, y, c=x, cmap=cmap)
plt.colorbar()
plt.show()

以上代码展示了一个自定义 Colormap,其中颜色从红色渐变到绿色再到蓝色。通过自定义 Colormap,我们可以实现更灵活的数据可视化效果。

6. 设置 Colormap 的范围

在某些情况下,我们可能希望调整 Colormap 的映射范围,以突出或压缩数据的特定部分。Matplotlib 允许我们通过 vminvmax 参数来设置 Colormap 的取值范围。以下示例展示了如何设置 Colormap 的范围:

import matplotlib.pyplot as plt
import numpy as np

# 数据
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)

plt.scatter(x, y, c=y, cmap='viridis', vmin=-1, vmax=1)
plt.colorbar()
plt.show()

Output:

Matplotlib Colormaps

运行以上代码,我们可以看到一幅以 ‘viridis’ colormap 映射的散点图,其中 Colormap 的取值范围被限定在 -1 到 1 之间。通过设置 Colormap 的范围,我们可以更好地展示数据的细节和差异。

7. 修改 Colormap 的亮度和对比度

有时候,我们可能想要调整 Colormap 的亮度和对比度,以增强可视化效果。Matplotlib 提供了 brightnesscontrast 参数,允许我们在不改变 Colormap 的颜色映射的情况下调整其亮度和对比度。以下示例展示了如何修改 Colormap 的亮度和对比度:

import matplotlib.pyplot as plt
import numpy as np

# 数据
x = np.random.randn(1000)
y = np.random.randn(1000)

plt.scatter(x, y, c=x, cmap='viridis', brightness=1.5, contrast=2.0)
plt.colorbar()
plt.show()

运行以上代码,我们可以看到一幅亮度和对比度调整后的散点图,其颜色映射仍然保持不变,但整体亮度和对比度有所示。调整 Colormap 的亮度和对比度可以使图表更加清晰和易读。

8. 离散化 Colormap

有时候,我们希望将连续的 Colormap 转换为离散的 Colormap,以便更好地表示离散数据。Matplotlib 提供了 ListedColormap 类来实现这一目的。以下示例展示了如何将连续的 Colormap 转换为离散的 Colormap:

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

# 数据
x = np.random.randint(0, 10, 1000)
y = np.random.randint(0, 10, 1000)

# 创建离散的 Colormap
colors = ['red', 'green', 'blue', 'yellow', 'purple', 'orange', 'cyan', 'magenta', 'pink', 'brown']
cmap = ListedColormap(colors)

plt.scatter(x, y, c=x, cmap=cmap)
plt.colorbar()
plt.show()

Output:

Matplotlib Colormaps

运行以上代码,我们可以看到一幅离散的 Colormap 映射的散点图,其中数据点的颜色根据不同的类别来区分。通过离散化 Colormap,我们可以更好地展示离散数据的分类情况。

9. 在图片上应用 Colormap

除了在散点图上使用 Colormap 外,我们还可以在图片上应用 Colormap。以下示例展示了如何在图片上应用 Colormap:

import matplotlib.pyplot as plt
import numpy as np

# 生成一个随机矩阵
data = np.random.rand(10, 10)

plt.imshow(data, cmap='viridis')
plt.colorbar()
plt.show()

Output:

Matplotlib Colormaps

运行以上代码,我们可以看到一副以 ‘viridis’ colormap 映射的图片,其中像素的颜色根据数据值来表示。在处理图片数据时,应用 Colormap 可以提高数据的可视化效果。

10. 设置默认 Colormap

在 Matplotlib 中,我们可以通过 plt.set_cmap() 方法设置默认的 Colormap,以使所有图表默认采用该 Colormap。以下示例展示了如何设置默认的 Colormap:

import matplotlib.pyplot as plt
import numpy as np

# 设置默认 Colormap
plt.set_cmap('tab20')

# 数据
x = np.random.randint(0, 20, 100)
y = np.random.randint(0, 20, 100)

plt.scatter(x, y, c=x)
plt.colorbar()
plt.show()

Output:

Matplotlib Colormaps

运行以上代码,我们可以看到一副以 ‘tab20’ colormap 映射的散点图,这是因为我们在代码中设置了默认的 Colormap。通过设置默认 Colormap,我们可以简化代码中的设置过程,并保持一致的可视化风格。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程