Matplotlib Colormap
Matplotlib是Python中最流行的绘图库之一,它提供了丰富的颜色映射(colormap)选项,用于美化图表。本文将详细介绍Matplotlib中的颜色映射功能,包括如何使用预定义的颜色映射、如何创建自定义的颜色映射等。
1. 使用预定义的颜色映射
Matplotlib中有许多预定义的颜色映射,可以通过matplotlib.cm
模块来访问。下面是一个简单的示例,使用预定义的颜色映射绘制一个简单的散点图:
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:
在上面的示例中,我们使用了viridis
颜色映射,并通过cmap
参数指定给散点图指定了颜色映射。
2. 自定义颜色映射
除了预定义的颜色映射外,我们还可以创建自定义的颜色映射。下面是一个示例代码,创建一个自定义的颜色映射,并将其应用到图表中:
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1)]
cmap_custom = LinearSegmentedColormap.from_list('custom', colors)
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.scatter(x, y, c=y, cmap=cmap_custom)
plt.colorbar()
plt.show()
在上面的示例中,我们创建了一个自定义的颜色映射cmap_custom
,并将其应用到散点图中。
3. 设置颜色映射范围
有时候我们需要设置颜色映射的范围,可以通过设置vmin
和vmax
参数来实现。下面是一个示例代码,将颜色映射范围限定在[0, 1]之间:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.cos(x)
plt.scatter(x, y, c=y, cmap='plasma', vmin=0, vmax=1)
plt.colorbar()
plt.show()
Output:
在上面的示例中,我们通过设置vmin
和vmax
参数来将颜色映射的范围限定在[0, 1]之间。
4. 使用颜色映射绘制热图
颜色映射在绘制热图(heatmap)时特别有用,下面是一个示例代码,使用颜色映射绘制一个简单的热图:
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rand(5, 5)
plt.imshow(data, cmap='coolwarm', interpolation='nearest')
plt.colorbar()
plt.show()
Output:
在上面的示例中,我们使用颜色映射coolwarm
绘制了一个简单的热图。
5. 结合颜色映射和3D图形
颜色映射也可以应用在3D图形中,下面是一个示例代码,使用颜色映射绘制一个简单的3D曲面图:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(x, y, z, cmap='plasma')
fig.colorbar(surf)
plt.show()
Output:
在上面的示例中,我们使用颜色映射plasma
绘制了一个简单的3D曲面图。
6. 透明度设置
除了颜色之外,透明度也可以通过颜色映射来控制。下面是一个示例代码,使用透明度来控制散点的颜色:
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
colors = np.random.rand(100)
sizes = 1000 * np.random.rand(100)
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='viridis')
plt.colorbar()
plt.show()
Output:
在上面的示例中,我们通过设置alpha
参数来控制散点的透明度。
7. 颜色映射的选择
在选择颜色映射时,需要根据数据的特点和图表的要求来选择合适的颜色映射。下面是一个示例代码,演示了不同颜色映射的效果:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
fig, axs = plt.subplots(2, 2)
axs[0, 0].scatter(x, y, c=y, cmap='viridis')
axs[0, 0].set_title('Viridis')
axs[0, 1].scatter(x, y, c=y, cmap='plasma')
axs[0, 1].set_title('Plasma')
axs[1, 0].scatter(x, y, c=y, cmap='cool')
axs[1, 0].set_title('Cool')
axs[1, 1].scatter(x, y, c=y, cmap='cividis')
axs[1, 1].set_title('Cividis')
plt.tight_layout()
plt.show()
Output:
在上面的示例中,我们比较了viridis
、plasma
、cool
和cividis
四种颜色映射的效果。
8. 颜色映射亮度调整
有时候我们需要调整颜色映射的亮度,可以通过ListedColormap
来实现。下面是一个示例代码,调整颜色映射的亮度:
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
colors = plt.cm.viridis.colors
brightness = 0.5
new_colors = colors * brightness
cmap_brightness = ListedColormap(new_colors)
x = np.linspace(0, 10, 100)
y = np.cos(x)
plt.scatter(x, y, c=y, cmap=cmap_brightness)
plt.colorbar()
plt.show()
在上面的示例中,我们调整了viridis
颜色映射的亮度,并将其应用到散点图中。
9. 使用颜色映射绘制直方图
直方图是用来表示数据分布的常用图表,我们可以通过颜色映射来美化直方图。下面是一个示例代码,使用颜色映射绘制一个简单的直方图:
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(1000)
plt.hist(data, bins=30, density=True, alpha=0.6, color='y', cmap='coolwarm')
plt.colorbar()
plt.show()
在上面的示例中,我们使用颜色映射coolwarm
将直方图中的每个条形柱子着色。
10. 高级颜色映射设置
除了上面介绍的基本功能外,Matplotlib还提供了一些高级的颜色映射设置选项,如设置颜色映射的亮度、对比度、饱和度等。下面是一个示例代码,演示了如何设置颜色映射的不同参数:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-10, 10, 100)
y = np.tan(x)
norm = plt.Normalize()
sm = plt.cm.ScalarMappable(cmap='viridis', norm=norm)
sm.set_array([])
fig, ax = plt.subplots()
sc = ax.scatter(x, y, c=y, cmap='viridis', norm=norm)
fig.colorbar(sm)
plt.show()
在上面的示例中,我们通过ScalarMappable
类设置了颜色映射的不同参数,包括亮度、对比度、饱和度等。
总结:
本文详细介绍了Matplotlib中的颜色映射功能,包括使用预定义的颜色映射、创建自定义的颜色映射、设置颜色映射范围、结合颜色映射绘制热图、使用颜色映射绘制3D图形等。