Matplotlib颜色映射

Matplotlib颜色映射

参考:Matplotlib Color Maps

Matplotlib是一个用于绘制图形的Python库,其中有许多颜色映射(colormap)可以帮助我们将数据可视化。颜色映射是一种将数据值映射到颜色的方法,可以让我们更直观地理解数据的分布和变化。

基本概念

在使用Matplotlib进行数据可视化时,我们常常需要选择合适的颜色映射来呈现数据。Matplotlib提供了很多内置的颜色映射,可以通过plt.cm模块来访问这些颜色映射。每个颜色映射都是一个从数据值到颜色的映射规则。

示例代码1:展示所有内置的颜色映射

import matplotlib.pyplot as plt

colors = plt.cm.datad.keys()

# 创建一个包含所有内置颜色映射的图例
fig, ax = plt.subplots(figsize=(10, 8))
for i, color in enumerate(colors):
    ax.add_patch(plt.Rectangle((0, i), 10, 1, color=color))
    ax.text(11, i+0.5, color, va='center')
ax.set_xlim(0, 12)
ax.set_ylim(0, len(colors))
ax.axis('off')
plt.show()

运行上面的代码可以得到一个展示了所有内置颜色映射的图例。

常用颜色映射

1. viridis

viridis是Matplotlib的默认颜色映射,它是一个逐渐从蓝色到黄色的连续颜色映射。

示例代码2:使用viridis颜色映射绘制散点图

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(100)
y = np.random.rand(100)
colors = np.random.rand(100)

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

Output:

Matplotlib颜色映射

上面的代码会生成一个使用viridis颜色映射的散点图。

2. hot

hot颜色映射是一个暖色调的连续颜色映射,从黑色到红色再到黄色。

示例代码3:使用hot颜色映射绘制等高线图

import numpy as np
import matplotlib.pyplot as plt

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

plt.contourf(X, Y, Z, cmap='hot')
plt.colorbar()
plt.show()

Output:

Matplotlib颜色映射

上面的代码会生成一个使用hot颜色映射的等高线图。

自定义颜色映射

除了使用内置的颜色映射外,我们还可以自定义颜色映射,根据自己的需求定制颜色变化规则。

示例代码4:自定义颜色映射

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

cdict = {'red':   [[0.0,  0.0, 0.0],
                   [1.0,  1.0, 1.0]],
         'green': [[0.0,  0.0, 0.0],
                   [1.0,  0.0, 0.0]],
         'blue':  [[0.0,  0.0, 0.0],
                   [1.0,  0.0, 0.0]]}

custom_cmap = LinearSegmentedColormap('custom_cmap', cdict)

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.contourf(X, Y, Z, cmap=custom_cmap)
plt.colorbar()
plt.show()

Output:

Matplotlib颜色映射

上面的示例代码展示了如何自定义颜色映射,并在等高线图中使用自定义的颜色映射。

颜色映射的选择

在选择颜色映射时,需要根据数据的特点和视觉效果来选择合适的颜色映射。下面介绍几种常见的场景和对应的推荐颜色映射。

1. 连续数据

对于连续的数据,推荐使用逐渐变化的颜色映射,如viridishot等。

示例代码5:使用viridis颜色映射绘制渐变色条

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(6, 1))
im = ax.imshow([[0, 1]], cmap='viridis')
plt.colorbar(im, orientation='horizontal')
plt.show()

Output:

Matplotlib颜色映射

上面的代码展示了使用viridis颜色映射绘制的渐变色条。

2. 离散数据

对于离散的数据,推荐使用颜色亮度相等的颜色映射,如tab10Set1等。

示例代码6:使用Set1颜色映射绘制柱状图

import matplotlib.pyplot as plt

x = ['A', 'B', 'C', 'D']
y = [10, 20, 15, 25]

plt.bar(x, y, color=plt.cm.Set1.colors)
plt.show()

Output:

Matplotlib颜色映射

上面的代码展示了使用Set1颜色映射绘制的柱状图。

3. 高对比度数据

对于具有高对比度的数据,推荐使用黑白相间或对比度强烈的颜色映射,如graybinary等。

示例代码7:使用binary颜色映射绘制热度图

import numpy as np
import matplotlib.pyplot as plt

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

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

Output:

Matplotlib颜色映射

上面的代码展示了使用binary颜色映射绘制的热度图。

颜色映射的调整

有时候我们还需要对颜色映射进行调整,例如改变颜色亮度、设置颜色反转等。

示例代码8:调整viridis颜色映射的亮度

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

# 初始亮度
im = ax.imshow([[0, 1]], cmap='viridis')
plt.colorbar(im, orientation='horizontal')
plt.title('Original')

# 降低亮度
im = ax.imshow([[0, 1]], cmap='viridis', vmin=0.3)
plt.colorbar(im, orientation='horizontal')
plt.title('Lower Brightness')

# 增加亮度
im = ax.imshow([[0, 1]], cmap='viridis', vmax=0.7)
plt.colorbar(im, orientation='horizontal')
plt.title('Higher Brightness')

plt.show()

Output:

Matplotlib颜色映射

上面的代码展示了如何调整viridis颜色映射的亮度。

示例代码9:颜色映射反转

import numpy as np
import matplotlib.pyplot as plt

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

plt.imshow(data, cmap='viridis', origin='lower')
plt.colorbar()
plt.title('Normal')

plt.figure()
plt.imshow(data, cmap='viridis', origin='lower', vmin=0, vmax=1)
plt.colorbar()
plt.title('Reversed')
plt.gca().invert_yaxis()

plt.show()

Output:

Matplotlib颜色映射

上面的代码展示了如何反转颜色映射的颜色顺序。

颜色映射的应用

颜色映射在数据可视化中有着广泛的应用,可以用于绘制热度图、等高线图、散点图等不同类型的图表。

示例代码10:绘制热度图

import numpy as np
import matplotlib.pyplot as plt

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

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

Output:

Matplotlib颜色映射

上面的示例展示了如何使用颜色映射绘制热度图。

示例代码11:绘制等高线图

import numpy as np
import matplotlib.pyplot as plt

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

plt.contourf(X, Y, Z, cmap='tab20b')
plt.colorbar()
plt.show()

Output:

Matplotlib颜色映射

上面的示例展示了如何使用颜色映射绘制等高线图。

示例代码12:绘制直方图

import numpy as np
import matplotlib.pyplot as plt

data = np.random.rand(1000)

plt.hist(data, bins=30, color='purple')
plt.show()

Output:

Matplotlib颜色映射

上面的示例展示了如何使用颜色设置为紫色绘制直方图。

结语

通过本文的介绍,我们了解了Matplotlib中颜色映射的基本概念、常用颜色映射、自定义颜色映射、颜色映射的选择、调整和应用等内容。颜色映射在数据可视化中起着至关重要的作用,帮助我们更直观地理解数据的分布和变化。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程