matplotlib colormaps
在数据可视化中,我们经常需要将数值映射到颜色上,以便更直观地理解数据的分布和趋势。而matplotlib提供了丰富的colormaps,可以帮助我们实现这一目的。Colormap是一种颜色映射机制,它可以将数据值映射到不同的颜色上。
常用colormaps
1. Viridis
Viridis是一种从深蓝色到亮黄色的颜色映射,适合于显示温度、海拔等连续型数据。下面是一个使用Viridis colormap的示例代码:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.scatter(x, y, c=y, cmap='viridis')
plt.colorbar()
plt.show()
Output:
2. Jet
Jet是一种从蓝色到红色的颜色映射,常用于表达高低值数据。下面是一个使用Jet colormap的示例代码:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.scatter(x, y, c=y, cmap='jet')
plt.colorbar()
plt.show()
Output:
3. RdBu
RdBu是一种从红色到蓝色的颜色映射,用于表示正负值数据。下面是一个使用RdBu colormap的示例代码:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-10, 10, 100)
y = np.tanh(x)
plt.scatter(x, y, c=y, cmap='RdBu')
plt.colorbar()
plt.show()
Output:
自定义colormaps
除了使用内置的colormaps外,我们还可以自定义自己的colormaps。下面是一个示例代码,演示了如何创建一个从蓝色到橙色的colormap:
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import numpy as np
colors = ['blue', 'orange']
cmap = mcolors.LinearSegmentedColormap.from_list('my_colormap', colors)
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.scatter(x, y, c=y, cmap=cmap)
plt.colorbar()
plt.show()
Output:
使用colormaps
在实际应用中,我们可以使用colormap来为不同的图表和数据展示添加颜色信息。下面是一些具体的示例代码:
4. 折线图使用colormap
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, color='blue', label='sin', alpha=0.5)
plt.plot(x, y2, color='orange', label='cos', alpha=0.5)
plt.legend()
plt.show()
Output:
5. 散点图使用colormap
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100) * 1000
plt.scatter(x, y, c=z, cmap='viridis')
plt.colorbar()
plt.show()
Output:
6. 等高线图使用colormap
import matplotlib.pyplot as plt
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(X) * np.cos(Y)
plt.contourf(X, Y, Z, cmap='jet')
plt.colorbar()
plt.show()
Output:
7. 3D图使用colormap
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
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)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='RdBu')
plt.show()
Output:
8. 箱形图使用colormap
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rand(100, 4)
labels = ['A', 'B', 'C', 'D']
plt.boxplot(data, patch_artist=True, notch=True, showmeans=True,
boxprops=dict(facecolor='orange', color='blue'),
whiskerprops=dict(color='green', linewidth=2),
capprops=dict(color='red', linewidth=2))
plt.xticks(range(1, len(labels)+1), labels)
plt.show()
Output:
9. 热力图使用colormap
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rand(10, 10)
plt.imshow(data, cmap='viridis', interpolation='nearest')
plt.colorbar()
plt.show()
Output:
10. 柱状图使用colormap
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(5)
y = np.random.rand(5)
plt.bar(x, y, color=plt.cm.viridis(y))
plt.show()
Output:
11. 饼图使用colormap
import matplotlib.pyplot as plt
import numpy as np
labels = ['A', 'B', 'C', 'D']
sizes = [25, 35, 20, 20]
colors = plt.cm.viridis(np.arange(len(sizes)) / len(sizes))
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.0f%%')
plt.show()
Output:
12. 气泡图使用colormap
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
size = np.random.rand(100) * 100
color = np.random.rand(100)
plt.scatter(x, y, s=size, c=color, cmap='viridis', alpha=0.5)
plt.colorbar()
plt.show()
Output:
13. 条形图使用colormap
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(5)
y = np.random.rand(5)
plt.barh(x, y, color=plt.cm.jet(y))
plt.show()
Output:
14. 区域图使用colormap
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
plt.fill_between(x, y1, y2, where=(y1 > y2), interpolate=True, color='blue', alpha=0.5)
plt.fill_between(x, y1, y2, where=(y1 < y2), interpolate=True, color='orange', alpha=0.5)
plt.show()
Output:
15. 雷达图使用colormap
import matplotlib.pyplot as plt
import numpy as np
labels = ['A', 'B', 'C', 'D', 'E']
values = [5, 8, 6, 7, 9]
# 将最后一个点与第一个点相连,使雷达图闭合
angles = np.linspace(0, 2*np.pi, len(labels), endpoint=False).tolist()
values += values[:1]
angles += angles[:1]
fig, ax = plt.subplots(subplot_kw={'polar': True})
ax.fill(angles, values, color='blue', alpha=0.25)
ax.set_yticks([3, 6, 9])
plt.show()
Output:
16. 水平线图使用colormap
import matplotlib.pyplot as plt
y = [1, 2, 3, 4, 5]
x = [0.5, 1, 1.5, 2, 2.5]
plt.hlines(y, 0, x, color=plt.cm.jet(y), alpha=0.5)
plt.show()
Output:
17. 面积图使用colormap
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
plt.stackplot(x, y1, y2, colors=['blue', 'orange'])
plt.show()
Output:
18. 散点密度图使用colormap
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
plt.hexbin(x, y, gridsize=30, cmap='viridis')
plt.colorbar()
plt.show()
Output:
19. 蜂窝图使用colormap
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
plt.hexbin(x, y, gridsize=30, cmap='viridis', edgecolors='black')
plt.colorbar()
plt.show()
Output:
20. 箭头图使用colormap
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 10)
y = np.linspace(0, 10, 10)
u = np.ones_like(x)
v = np.zeros_like(y)
plt.quiver(x, y, u, v, scale=10, cmap='viridis')
plt.show()
Output:
通过以上示例代码,我们可以看到在不同类型的图表中如何使用colormaps,为数据可视化添加丰富的颜色信息,使得数据更加直观和易于理解。