Matplotlib颜色映射
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:
上面的代码会生成一个使用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:
上面的代码会生成一个使用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:
上面的示例代码展示了如何自定义颜色映射,并在等高线图中使用自定义的颜色映射。
颜色映射的选择
在选择颜色映射时,需要根据数据的特点和视觉效果来选择合适的颜色映射。下面介绍几种常见的场景和对应的推荐颜色映射。
1. 连续数据
对于连续的数据,推荐使用逐渐变化的颜色映射,如viridis
、hot
等。
示例代码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:
上面的代码展示了使用viridis
颜色映射绘制的渐变色条。
2. 离散数据
对于离散的数据,推荐使用颜色亮度相等的颜色映射,如tab10
、Set1
等。
示例代码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:
上面的代码展示了使用Set1
颜色映射绘制的柱状图。
3. 高对比度数据
对于具有高对比度的数据,推荐使用黑白相间或对比度强烈的颜色映射,如gray
、binary
等。
示例代码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:
上面的代码展示了使用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:
上面的代码展示了如何调整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:
上面的代码展示了如何反转颜色映射的颜色顺序。
颜色映射的应用
颜色映射在数据可视化中有着广泛的应用,可以用于绘制热度图、等高线图、散点图等不同类型的图表。
示例代码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:
上面的示例展示了如何使用颜色映射绘制热度图。
示例代码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:
上面的示例展示了如何使用颜色映射绘制等高线图。
示例代码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中颜色映射的基本概念、常用颜色映射、自定义颜色映射、颜色映射的选择、调整和应用等内容。颜色映射在数据可视化中起着至关重要的作用,帮助我们更直观地理解数据的分布和变化。