pin_drop当前位置:知识文库 ❯ 图文
Matplotlib颜色与样式完全指南 - 颜色映射、线条样式、内置样式详解
一、颜色与样式概述
matplotlib提供了丰富的颜色和样式自定义选项,是数据可视化中最基础也是最常用的功能之一。合理的颜色和样式选择可以增强图表的视觉表现力和信息传达效果,让数据更加直观易懂。
matplotlib支持的颜色格式包括:命名颜色(如'red')、十六进制颜色(如'#FF5722')、RGB/RGBA元组等。同时提供强大的颜色映射(colormap)功能,可将连续数值映射为渐变色。
二、颜色格式详解
matplotlib支持多种颜色指定方式,满足不同场景的需求:
以下是颜色格式的实际使用示例:
代码示例
import matplotlib.pyplot as plt
import numpy as np
# 不同颜色格式设置
plt.plot(x, y, color='red') # 命名颜色
plt.plot(x, y, color='#2196F3') # 十六进制颜色
plt.plot(x, y, color=(0.3, 0.7, 0.2)) # RGB元组
plt.plot(x, y, color='0.5') # 灰度值三、颜色映射(Colormap)
颜色映射(colormap)是matplotlib中非常强大的功能,它将数值自动映射为颜色,特别适合散点图、热力图、等高线图等需要展示数据分布的场景。
常用颜色映射分类
颜色映射的使用配合colorbar()函数可以显示色条,帮助读者理解颜色与数值的对应关系:
代码示例
# 颜色映射应用
plt.scatter(x, y, c=values, cmap='viridis')
plt.colorbar() # 显示颜色条小贴士
viridis是matplotlib 2.0之后的默认颜色映射,它是感知均匀的、色盲友好的,并且在黑白打印时也能保持清晰的灰度变化,强烈推荐作为首选颜色映射。
四、线条样式与标记
线条样式用于区分图表中的不同数据系列,matplotlib提供了4种基本线型和多种标记符号。
线型(linestyle)
-
实线:
linestyle='-'(默认) -
虚线:
linestyle='--' -
点划线:
linestyle='-.' -
点线:
linestyle=':'
标记符号(marker)
-
圆形:
marker='o' -
方形:
marker='s' -
三角形:
marker='^' -
星形:
marker='*'
五、内置样式切换
matplotlib内置了多种全局样式,通过plt.style.use()一键切换图表整体外观:
查看系统所有可用样式:
代码示例
import matplotlib.pyplot as plt
print(plt.style.available) # 列出所有可用样式六、代码示例实战
示例1:颜色格式与线条样式综合应用
代码示例
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 50)
fig, ax = plt.subplots(figsize=(10, 6))
# 不同颜色格式
ax.plot(x, np.sin(x), color='red', linewidth=2, label='Named: red')
ax.plot(x, np.sin(x) + 0.5, color='#2196F3', linewidth=2, label='Hex: #2196F3')
ax.plot(x, np.sin(x) + 1, color=(0.3, 0.7, 0.2), linewidth=2, label='RGB: (0.3,0.7,0.2)')
ax.plot(x, np.sin(x) + 1.5, color='0.5', linewidth=2, label='Gray: 0.5')
# 不同线型
ax.plot(x, np.cos(x), linestyle='-', linewidth=2, label='Solid')
ax.plot(x, np.cos(x) + 0.5, linestyle='--', linewidth=2, label='Dashed')
ax.plot(x, np.cos(x) + 1, linestyle='-.', linewidth=2, label='DashDot')
ax.plot(x, np.cos(x) + 1.5, linestyle=':', linewidth=2, label='Dotted')
ax.legend(loc='upper right', fontsize=9, ncol=2)
ax.set_title('Color and Line Styles')
ax.grid(True, alpha=0.3)
plt.savefig('color_line_styles.png', dpi=100, bbox_inches='tight')
print("颜色与线型已保存")输出:
代码示例
颜色与线型已保存示例2:颜色映射对比
代码示例
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
n = 200
x = np.random.randn(n)
y = np.random.randn(n)
colors = x + y # 颜色值
sizes = np.random.randint(30, 200, n)
fig, axes = plt.subplots(1, 3, figsize=(18, 5))
# viridis颜色映射
sc1 = axes[0].scatter(x, y, c=colors, cmap='viridis', s=sizes, alpha=0.7)
fig.colorbar(sc1, ax=axes[0])
axes[0].set_title('viridis')
# coolwarm颜色映射
sc2 = axes[1].scatter(x, y, c=colors, cmap='coolwarm', s=sizes, alpha=0.7)
fig.colorbar(sc2, ax=axes[1])
axes[1].set_title('coolwarm')
# RdBu颜色映射
sc3 = axes[2].scatter(x, y, c=colors, cmap='RdBu', s=sizes, alpha=0.7)
fig.colorbar(sc3, ax=axes[2])
axes[2].set_title('RdBu')
fig.suptitle('Colormap Comparison', fontsize=14, fontweight='bold')
plt.tight_layout()
plt.savefig('colormap_demo.png', dpi=100, bbox_inches='tight')
print("颜色映射已保存")输出:
代码示例
颜色映射已保存示例3:内置样式对比
代码示例
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 50)
styles = ['default', 'ggplot', 'dark_background']
fig, axes = plt.subplots(1, 3, figsize=(18, 5))
for ax, style in zip(axes, styles):
plt.style.use(style)
ax.plot(x, np.sin(x), linewidth=2)
ax.plot(x, np.cos(x), linewidth=2)
ax.set_title(f"Style: {style}")
ax.grid(True, alpha=0.3)
# 恢复默认样式
plt.style.use('default')
plt.tight_layout()
plt.savefig('style_comparison.png', dpi=100, bbox_inches='tight')
print("样式对比已保存")输出:
代码示例
样式对比已保存七、实际应用场景
-
学术论文:使用viridis等色盲友好颜色映射,确保所有读者都能正确理解图表
-
演示文稿:使用dark_background样式配合投影仪,深色背景在暗光环境下更清晰
-
品牌图表:使用企业VI色系的十六进制颜色,保持品牌一致性
八、注意事项
注意:选择颜色映射时应考虑色盲友好性,推荐使用viridis、cividis等感知均匀映射,避免使用rainbow/jet等感知不均匀的颜色映射。
注意:
plt.style.use()是全局设置,会影响后续所有图表。建议使用with plt.style.context('样式名'):进行临时样式切换。
注意:同一图表中颜色不宜过多,建议不超过7种区分色,否则会造成视觉混乱,降低图表可读性。
九、常见问题FAQ
如何查看所有可用的颜色映射名称?
使用matplotlib.colormaps可以获取所有可用的颜色映射名称。在matplotlib 3.6+版本中,使用list(matplotlib.colormaps)即可查看。
plt.style.use()会影响已经绘制的图表吗?
不会。plt.style.use()只影响调用之后创建的图表,不会改变已经创建或绘制的图表。如果要临时切换样式,建议使用with plt.style.context('样式名'):上下文管理器。
为什么推荐使用viridis而不是rainbow/jet?
rainbow和jet颜色映射在感知上不均匀,会产生虚假的边界和渐变,且对色盲读者不友好。viridis是感知均匀的颜色映射,黑白打印时也能保持清晰的灰度变化,是科学可视化的最佳实践。matplotlib从2.0版本开始已将viridis设为默认颜色映射。
如何自定义颜色映射?
可以使用matplotlib.colors.LinearSegmentedColormap.from_list()从颜色列表创建自定义颜色映射,也可以使用ListedColormap从离散颜色创建。例如:cmap = LinearSegmentedColormap.from_list('custom', ['blue', 'white', 'red'])。
本文涉及AI创作
内容由AI创作,请仔细甄别