使用Matplotlib定制颜色映射(cmap)
Matplotlib是Python中最流行的绘图库之一,它提供了许多功能强大的绘图工具,其中包括颜色映射(cmap),可以帮助我们更好地展示数据的分布和变化。在本文中,我们将介绍如何使用Matplotlib库中的颜色映射功能来定制我们的绘图颜色。我们将涵盖不同类型的颜色映射以及如何使用这些颜色映射来美化我们的图表。
创建默认的颜色映射
首先,让我们看一下如何使用Matplotlib中的默认颜色映射来创建一个简单的绘图。我们可以使用plt.scatter
函数和c
参数来指定颜色映射。
import matplotlib.pyplot as plt
import numpy as np
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:
在这个示例中,我们生成了100个随机坐标点,并且将随机生成的颜色赋给colors
数组。我们使用cmap='viridis'
来指定颜色映射为’viridis’,然后绘制散点图和颜色栏。
使用不同的颜色映射
Matplotlib提供了许多不同的内置颜色映射供我们使用,如’viridis’、’plasma’、’inferno’、’magma’等。下面是一个示例,展示了如何使用不同的颜色映射。
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
colors = np.random.rand(100)
plt.scatter(x, y, c=colors, cmap='plasma')
plt.colorbar()
plt.show()
Output:
在这个示例中,我们将颜色映射改为’plasma’,可以看到绘图颜色发生了改变。
自定义颜色映射
除了使用内置的颜色映射之外,我们还可以自定义自己的颜色映射。我们可以利用ListedColormap
和LinearSegmentedColormap
两个类来创建自定义的颜色映射。
使用ListedColormap
下面是一个使用ListedColormap
创建自定义颜色映射的示例。
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
colors_custom = ['#FF0000', '#00FF00', '#0000FF']
cmap_custom = ListedColormap(colors_custom)
plt.scatter(x, y, c=colors, cmap=cmap_custom)
plt.colorbar()
plt.show()
在这个示例中,我们定义了一个包含三种颜色的列表colors_custom
,然后使用ListedColormap
创建自定义的颜色映射cmap_custom
,最后将其应用到散点图中。
使用LinearSegmentedColormap
另外,我们也可以使用LinearSegmentedColormap
创建更加复杂的自定义颜色映射。
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
cdict = {'red': [[0.0, 0.0, 0.0], [0.5, 1.0, 1.0], [1.0, 1.0, 1.0]],
'green': [[0.0, 0.0, 0.0], [0.5, 1.0, 1.0], [1.0, 0.0, 0.0]],
'blue': [[0.0, 1.0, 1.0], [0.5, 1.0, 1.0], [1.0, 0.0, 0.0]]}
cmap_custom2 = LinearSegmentedColormap('custom', cdict)
plt.scatter(x, y, c=colors, cmap=cmap_custom2)
plt.colorbar()
plt.show()
在这个示例中,我们定义了一个颜色字典cdict
,分别指定了’red’、’green’、’blue’三个通道的颜色,在通过LinearSegmentedColormap
创建自定义的颜色映射cmap_custom2
,然后将其应用到散点图上。
调整颜色映射的范围
有时候我们需要调整颜色映射的范围,以便更好地展示数据的变化。我们可以使用Normalize
函数来指定颜色映射的范围。
import matplotlib.pyplot as plt
from matplotlib.colors import Normalize
plt.scatter(x, y, c=colors, cmap='viridis', norm=Normalize(vmin=0, vmax=0.5))
plt.colorbar()
plt.show()
在这个示例中,我们使用Normalize(vmin=0, vmax=0.5)
来限定颜色映射的范围在0到0.5之间,这样可以更突出数据的变化。
针对不同数据类型使用颜色映射
除了在散点图中使用颜色映射外,我们还可以在其他类型的图表中应用颜色映射,比如柱状图、等值线图等。
柱状图
import matplotlib.pyplot as plt
height = [3, 1, 4, 5, 2]
bars = ('A', 'B', 'C', 'D', 'E')
plt.bar(bars, height, color=plt.cm.viridis(colors))
plt.show()
在这个示例中,我们将颜色映射应用到柱状图中的每一个柱子。
等值线图
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3.0, 3.0, 100)
y = np.linspace(-3.0, 3.0, 100)
X, Y = np.meshgrid(x, y)
Z = np.exp(-X**2 - Y**2)
plt.contourf(X, Y, Z, cmap='plasma')
plt.colorbar()
plt.show()
Output:
在这个示例中,我们使用等值线图展示二维数据,并使用颜色映射’plasma’来表示数据的不同强度。