Matplotlib cmap
1. 简介
Matplotlib是一个Python绘图库,可以用于创建各种类型的图形,包括线图、柱状图、散点图等。Color map(简称cmap)在Matplotlib中扮演着重要的角色,它可以用于对图形添加色彩,使图形更加生动和美观。在本文中,我们将详细介绍Matplotlib中cmap的使用方法,并通过示例代码来演示其功能和效果。
2. 创建基本图形
在使用cmap之前,我们先创建一个基本的图形,如散点图或柱状图,作为cmap的基础。下面我们通过示例代码创建一个简单的散点图,并使用默认的color map。
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)
plt.show()
Output:
运行上述代码,可以看到创建的散点图,其中每个点的颜色是随机的。接下来,我们将介绍如何使用不同的color map来定义点的颜色。
3. 使用预定义的color map
Matplotlib提供了许多预定义的color map供用户选择,常见的有”viridis”、”plasma”、”inferno”等。下面我们通过示例代码展示如何使用这些预定义的color map。
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:
通过将cmap='viridis'
传入scatter函数中,我们可以看到散点图的颜色变为了viridis color map定义的颜色,并且通过plt.colorbar()
方法添加了一个颜色条,用于解释颜色和值之间的对应关系。
4. 自定义color map
除了使用预定义的color map外,Matplotlib还支持用户自定义color map。下面我们通过示例代码创建一个自定义的color map,并应用到散点图中。
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1)] # 定义颜色,格式为RGB
cmap_name = 'my_colormap'
cm = LinearSegmentedColormap.from_list(cmap_name, colors, N=100)
plt.scatter(x, y, c=colors, cmap=cmap_name)
plt.colorbar()
plt.show()
在上述示例中,我们定义了一个包含红、绿、蓝三种颜色的color map,并将其应用到散点图中。通过LinearSegmentedColormap.from_list()
方法创建自定义的color map,并通过指定N参数设置颜色数量。运行代码后,可以看到散点图的颜色为我们定义的颜色。
5. 调整color map范围
有时候我们希望调整color map的范围,使得颜色更加区分明显。Matplotlib提供了vmin
和vmax
参数来实现这一目的。下面我们通过示例代码来演示如何调整color map的范围。
plt.scatter(x, y, c=colors, cmap='viridis', vmin=0.2, vmax=0.8)
plt.colorbar()
plt.show()
在上述示例中,我们通过设置vmin=0.2
和vmax=0.8
来调整color map的范围,使得颜色只在这个范围内变化。通过轴旁的颜色条,可以更清晰地看到颜色和值之间的对应关系。
6. 调整color map的透明度
有时候我们希望调整color map的透明度,使得底层的图形更加清晰可见。Matplotlib的color map支持alpha参数,用于控制透明度。下面我们通过示例代码演示如何调整color map的透明度。
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1)] # 定义颜色,格式为RGB
plt.scatter(x, y, c=colors, cmap='viridis', alpha=0.5)
plt.colorbar()
plt.show()
在上述示例中,我们通过设置alpha=0.5
来调整color map的透明度为50%,使得底层的数据点更加清晰可见。
7. 反转color map
有时候我们希望反转color map的颜色顺序,使得颜色的分布更加符合我们的需求。Matplotlib提供了reversed()
方法来实现color map的反转。下面我们通过示例代码演示如何反转color map。
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1)] # 定义颜色,格式为RGB
plt.scatter(x, y, c=colors, cmap='viridis_r')
plt.colorbar()
plt.show()
在上述示例中,通过在color map名称后面添加”_r”来反转color map的颜色。运行代码后,可以看到散点图的颜色顺序与之前相反。
8. 指定color map的颜色数量
有时候我们希望自定义color map的颜色数量,使得颜色过渡更加平滑。Matplotlib提供了N
参数来指定color map的颜色数量。下面我们通过示例代码来演示如何指定color map的颜色数量。
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1)] # 定义颜色,格式为RGB
plt.scatter(x, y, c=colors, cmap='viridis', N=50)
plt.colorbar()
plt.show()
在上述示例中,通过设置N=50
来指定color map的颜色数量为50种。运行代码后,可以看到颜色过渡更加平滑。
9. 使用不同的color map类型
除了常见的线性color map外,Matplotlib还提供了许多其他类型的color map,例如离散的color map和循环的color map。下面我们通过示例代码来演示如何使用不同类型的color map。
- 离散的color map
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1)] # 定义颜色,格式为RGB
plt.scatter(x, y, c=colors, cmap='tab10')
plt.colorbar()
plt.show()
在上述示例中,我们使用tab10
作为color map,它是一个包含10种颜色的离散color map。通过颜色条,可以清晰地看到10种不同的颜色。
- 循环的color map
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1)] # 定义颜色,格式为RGB
plt.scatter(x, y, c=colors, cmap='hsv')
plt.colorbar()
plt.show()
在上述示例中,我们使用hsv
作为color map,它是一个循环的color map,通过hue、saturation和value三种属性来定义颜色。运行代码后,可以看到颜色的循环变化。
10. 使用color map进行图像绘制
除了散点图之外,color map还可以应用于图像绘制中,使得图像更加生动。下面我们通过示例代码来演示如何使用color map进行图像绘制## 11. 使用color map进行图像绘制
在Matplotlib中,我们可以使用imshow()
函数将数组数据绘制成图像,并通过color map来定义颜色。下面我们通过示例代码演示如何使用color map进行图像绘制。
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数组数据
data = np.random.rand(10, 10)
plt.imshow(data, cmap='plasma')
plt.colorbar()
plt.show()
Output:
在上述示例中,我们使用plasma
作为color map,将随机生成的10×10数组数据绘制成图像。通过color map,可以清晰地看到数据的分布和变化。
12. 调整color map的颜色亮度
有时候我们希望调整color map的颜色亮度,使得图像更加清晰和易于识别。Matplotlib提供了brighten()
方法来调整color map的颜色亮度。下面我们通过示例代码演示如何调整color map的颜色亮度。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap
data = np.random.rand(10, 10)
cmap = plt.get_cmap('plasma')
new_cmap = ListedColormap(cmap(np.linspace(0.2, 0.8, 256)))
plt.imshow(data, cmap=new_cmap)
plt.colorbar()
plt.show()
Output:
在上述示例中,我们通过cmap(np.linspace(0.2, 0.8, 256))
来调整color map的亮度范围,使得图像颜色更加明亮。运行代码后,可以看到图像的颜色更加清晰。
13. 创建自定义color map的比例尺
有时候我们希望在图形上添加自定义color map的比例尺,用于显示颜色和值的对应关系。Matplotlib提供了colorbar
函数来创建color map的比例尺。下面我们通过示例代码演示如何创建自定义color map的比例尺。
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1)] # 定义颜色,格式为RGB
plt.scatter(x, y, c=colors, cmap='viridis')
plt.colorbar(ticks=[0, 0.5, 1], format='%0.2f')
plt.show()
在上述示例中,我们通过ticks
参数指定刻度值为0、0.5和1,通过format='%0.2f'
指定格式为保留两位小数。运行代码后,可以看到颜色条上出现了自定义的刻度值。
14. 混合不同的color map
有时候我们希望在图形中混合多种不同的color map,以实现特定的效果。在Matplotlib中,我们可以通过ListedColormap
和concatenated
函数来实现color map的混合。下面我们通过示例代码演示如何混合不同的color map。
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1)] # 定义颜色,格式为RGB
cmap1 = plt.get_cmap('viridis')
cmap2 = plt.get_cmap('plasma')
new_cmap = ListedColormap(np.vstack((cmap1(np.linspace(0, 1, 128)),
cmap2(np.linspace(0, 1, 128))))
plt.scatter(x, y, c=colors, cmap=new_cmap)
plt.colorbar()
plt.show()
在上述示例中,我们通过np.vstack()
函数将两种不同的color map混合在一起,并创建一个新的color map。运行代码后,可以看到散点图颜色的混合效果。