简体中文 繁體中文 English Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย Français Japanese

站内搜索

搜索

活动公告

通知:为庆祝网站一周年,将在5.1日与5.2日开放注册,具体信息请见后续详细公告
04-22 00:04
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

掌握matplotlib线条颜色设置技巧让你的数据可视化图表更加生动直观专业从基础颜色代码到高级自定义方法全面解析提升数据呈现效果

SunJu_FaceMall

3万

主题

1174

科技点

3万

积分

白金月票

碾压王

积分
32796

立华奏

发表于 2025-8-26 16:40:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引言

在数据可视化领域,颜色是传达信息、增强可读性和吸引观众注意力的关键元素。Matplotlib作为Python中最流行的数据可视化库之一,提供了丰富而灵活的颜色设置选项,使用户能够创建既美观又信息丰富的图表。本文将全面解析matplotlib中的线条颜色设置技巧,从基础的颜色代码到高级的自定义方法,帮助你提升数据呈现效果,使你的图表更加生动、直观和专业。

基础颜色设置方法

颜色名称

Matplotlib支持多种基本颜色名称,这些名称直观易记,适合快速设置图表元素的颜色。常用的颜色名称包括:

• ‘b’ - 蓝色 (blue)
• ‘g’ - 绿色 (green)
• ‘r’ - 红色 (red)
• ‘c’ - 青色 (cyan)
• ’m’ - 品红 (magenta)
• ‘y’ - 黄色 (yellow)
• ‘k’ - 黑色 (black)
• ‘w’ - 白色 (white)

以下是一个使用颜色名称的简单示例:
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. x = np.linspace(0, 10, 100)
  4. y = np.sin(x)
  5. plt.figure(figsize=(10, 6))
  6. plt.plot(x, y, 'r', label='红色线条')  # 使用单字母颜色代码
  7. plt.plot(x, np.cos(x), 'blue', label='蓝色线条')  # 使用完整颜色名称
  8. plt.title('使用颜色名称的示例')
  9. plt.xlabel('X轴')
  10. plt.ylabel('Y轴')
  11. plt.legend()
  12. plt.grid(True)
  13. plt.show()
复制代码

除了这些基本颜色外,matplotlib还支持HTML/CSS颜色名称,如’lightblue’, ‘darkgreen’, ‘orchid’等:
  1. plt.figure(figsize=(10, 6))
  2. plt.plot(x, y, 'orchid', label='兰花紫')
  3. plt.plot(x, np.cos(x), 'darkgreen', label='深绿色')
  4. plt.title('使用HTML/CSS颜色名称的示例')
  5. plt.xlabel('X轴')
  6. plt.ylabel('Y轴')
  7. plt.legend()
  8. plt.grid(True)
  9. plt.show()
复制代码

颜色代码(十六进制)

十六进制颜色代码提供了更精确的颜色控制,格式为’#RRGGBB’,其中RR、GG、BB分别是红色、绿色和蓝色的十六进制值(00-FF)。如果需要设置透明度,可以使用’#RRGGBBAA’格式,其中AA表示透明度(00-完全透明,FF-完全不透明)。
  1. plt.figure(figsize=(10, 6))
  2. plt.plot(x, y, '#FF5733', label='珊瑚色 (#FF5733)')
  3. plt.plot(x, np.cos(x), '#33FF57', label='鲜绿色 (#33FF57)')
  4. plt.plot(x, np.sin(x) + np.cos(x), '#3357FF', label='亮蓝色 (#3357FF)')
  5. plt.title('使用十六进制颜色代码的示例')
  6. plt.xlabel('X轴')
  7. plt.ylabel('Y轴')
  8. plt.legend()
  9. plt.grid(True)
  10. plt.show()
复制代码

使用带透明度的十六进制颜色代码:
  1. plt.figure(figsize=(10, 6))
  2. plt.plot(x, y, '#FF5733CC', label='珊瑚色 (80%不透明)')
  3. plt.plot(x, np.cos(x), '#33FF5780', label='鲜绿色 (50%不透明)')
  4. plt.plot(x, np.sin(x) + np.cos(x), '#3357FF40', label='亮蓝色 (25%不透明)')
  5. plt.title('使用带透明度的十六进制颜色代码的示例')
  6. plt.xlabel('X轴')
  7. plt.ylabel('Y轴')
  8. plt.legend()
  9. plt.grid(True)
  10. plt.show()
复制代码

RGB/RGBA元组

除了颜色名称和十六进制代码,matplotlib还支持使用RGB或RGBA元组来指定颜色。RGB元组包含三个0-1之间的浮点数,分别表示红色、绿色和蓝色的强度。RGBA元组则在RGB基础上增加了第四个参数,表示透明度(0-完全透明,1-完全不透明)。
  1. plt.figure(figsize=(10, 6))
  2. plt.plot(x, y, (1.0, 0.34, 0.2), label='RGB珊瑚色')
  3. plt.plot(x, np.cos(x), (0.2, 1.0, 0.34), label='RGB鲜绿色')
  4. plt.plot(x, np.sin(x) + np.cos(x), (0.2, 0.34, 1.0), label='RGB亮蓝色')
  5. plt.title('使用RGB元组的示例')
  6. plt.xlabel('X轴')
  7. plt.ylabel('Y轴')
  8. plt.legend()
  9. plt.grid(True)
  10. plt.show()
复制代码

使用RGBA元组设置带透明度的颜色:
  1. plt.figure(figsize=(10, 6))
  2. plt.plot(x, y, (1.0, 0.34, 0.2, 0.8), label='RGBA珊瑚色 (80%不透明)')
  3. plt.plot(x, np.cos(x), (0.2, 1.0, 0.34, 0.5), label='RGBA鲜绿色 (50%不透明)')
  4. plt.plot(x, np.sin(x) + np.cos(x), (0.2, 0.34, 1.0, 0.25), label='RGBA亮蓝色 (25%不透明)')
  5. plt.title('使用RGBA元组的示例')
  6. plt.xlabel('X轴')
  7. plt.ylabel('Y轴')
  8. plt.legend()
  9. plt.grid(True)
  10. plt.show()
复制代码

高级颜色设置技巧

颜色循环和属性设置

Matplotlib使用默认的颜色循环来为多条线自动分配不同的颜色。你可以自定义这个颜色循环,以满足特定的设计需求或提高图表的一致性。
  1. # 设置自定义颜色循环
  2. plt.rcParams['axes.prop_cycle'] = plt.cycler(color=['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b'])
  3. plt.figure(figsize=(10, 6))
  4. for i in range(1, 5):
  5.     plt.plot(x, np.sin(x) + i, label=f'Line {i}')
  6. plt.title('自定义颜色循环示例')
  7. plt.xlabel('X轴')
  8. plt.ylabel('Y轴')
  9. plt.legend()
  10. plt.grid(True)
  11. plt.show()
复制代码

你还可以通过set_color_cycle方法(在较新版本中已弃用,推荐使用上述方法)或直接设置prop_cycle属性来自定义颜色循环:
  1. # 另一种设置自定义颜色循环的方法
  2. from cycler import cycler
  3. custom_cycler = cycler(color=['#E24A33', '#348ABD', '#988ED5', '#777777', '#FBC15E', '#8EBA42', '#FFB5B8'])
  4. plt.rc('axes', prop_cycle=custom_cycler)
  5. plt.figure(figsize=(10, 6))
  6. for i in range(1, 5):
  7.     plt.plot(x, np.cos(x) + i, label=f'Line {i}')
  8. plt.title('使用cycler设置自定义颜色循环')
  9. plt.xlabel('X轴')
  10. plt.ylabel('Y轴')
  11. plt.legend()
  12. plt.grid(True)
  13. plt.show()
复制代码

色彩映射(Colormap)

色彩映射(Colormap)是将数据值映射到颜色的机制,特别适用于显示三维数据或强调数据的变化趋势。Matplotlib提供了多种内置的色彩映射,可以分为以下几类:

1. 顺序色彩映射:表示从低到高的数值变化,如’viridis’, ‘plasma’, ‘inferno’, ‘magma’, ‘cividis’等。
2. 发散色彩映射:表示偏离中间值的变化,如’coolwarm’, ‘RdBu’, ‘RdYlBu’等。
3. 定性色彩映射:表示没有特定顺序的分类数据,如’tab10’, ‘Set1’, ‘Set2’, ‘Set3’等。

以下是一个使用色彩映射的示例:
  1. import matplotlib.cm as cm
  2. plt.figure(figsize=(10, 6))
  3. for i, cmap in enumerate(['viridis', 'plasma', 'inferno', 'magma']):
  4.     plt.subplot(2, 2, i+1)
  5.     plt.scatter(x, np.sin(x) + i, c=x, cmap=cmap, s=10)
  6.     plt.colorbar(label='数值')
  7.     plt.title(f'色彩映射: {cmap}')
  8.     plt.xlabel('X轴')
  9.     plt.ylabel('Y轴')
  10. plt.tight_layout()
  11. plt.show()
复制代码

使用发散色彩映射的示例:
  1. plt.figure(figsize=(10, 6))
  2. for i, cmap in enumerate(['coolwarm', 'RdBu', 'RdYlBu', 'seismic']):
  3.     plt.subplot(2, 2, i+1)
  4.     plt.scatter(x, np.sin(x) + i, c=np.sin(x), cmap=cmap, s=10, vmin=-1, vmax=1)
  5.     plt.colorbar(label='数值')
  6.     plt.title(f'发散色彩映射: {cmap}')
  7.     plt.xlabel('X轴')
  8.     plt.ylabel('Y轴')
  9. plt.tight_layout()
  10. plt.show()
复制代码

自定义颜色映射

有时,内置的色彩映射可能无法满足你的特定需求。在这种情况下,你可以创建自定义的颜色映射。Matplotlib提供了多种方法来创建自定义颜色映射,包括LinearSegmentedColormap和ListedColormap。

使用LinearSegmentedColormap创建平滑过渡的颜色映射:
  1. from matplotlib.colors import LinearSegmentedColormap
  2. # 定义自定义颜色映射
  3. colors = [(0.1, 0.1, 0.6), (0.2, 0.4, 0.8), (0.8, 0.8, 0.2), (0.8, 0.4, 0.2), (0.6, 0.1, 0.1)]  # 蓝到红
  4. cmap_name = 'custom_blue_red'
  5. custom_cmap = LinearSegmentedColormap.from_list(cmap_name, colors)
  6. plt.figure(figsize=(10, 6))
  7. plt.scatter(x, np.sin(x), c=x, cmap=custom_cmap, s=30)
  8. plt.colorbar(label='X值')
  9. plt.title('自定义颜色映射示例')
  10. plt.xlabel('X轴')
  11. plt.ylabel('Y轴')
  12. plt.grid(True)
  13. plt.show()
复制代码

使用ListedColormap创建离散的颜色映射:
  1. from matplotlib.colors import ListedColormap
  2. # 定义离散颜色
  3. discrete_colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd']
  4. discrete_cmap = ListedColormap(discrete_colors)
  5. plt.figure(figsize=(10, 6))
  6. # 创建一些分类数据
  7. categories = np.random.randint(0, 5, size=len(x))
  8. plt.scatter(x, np.sin(x), c=categories, cmap=discrete_cmap, s=30)
  9. # 创建自定义颜色条
  10. cbar = plt.colorbar(ticks=[0, 1, 2, 3, 4])
  11. cbar.ax.set_yticklabels(['类别0', '类别1', '类别2', '类别3', '类别4'])
  12. plt.title('离散颜色映射示例')
  13. plt.xlabel('X轴')
  14. plt.ylabel('Y轴')
  15. plt.grid(True)
  16. plt.show()
复制代码

特殊图表类型的颜色设置

不同类型的图表可能需要不同的颜色设置策略。下面我们将探讨几种常见图表类型的颜色设置技巧。

折线图颜色设置

折线图是最常用的图表类型之一,颜色设置可以突出不同的数据系列或表示数据的变化趋势。
  1. plt.figure(figsize=(10, 6))
  2. # 基本折线图颜色设置
  3. plt.plot(x, np.sin(x), color='#1f77b4', linewidth=2, label='正弦函数')
  4. plt.plot(x, np.cos(x), color='#ff7f0e', linewidth=2, linestyle='--', label='余弦函数')
  5. # 使用渐变颜色表示趋势
  6. for i in range(len(x)-1):
  7.     plt.plot(x[i:i+2], np.sin(x)[i:i+2], color=cm.viridis(i/len(x)), linewidth=2)
  8. plt.title('折线图颜色设置示例')
  9. plt.xlabel('X轴')
  10. plt.ylabel('Y轴')
  11. plt.legend()
  12. plt.grid(True)
  13. plt.show()
复制代码

散点图颜色设置

散点图通常使用颜色来表示第三个维度的数据,或者区分不同的数据类别。
  1. # 生成一些随机数据
  2. np.random.seed(42)
  3. N = 100
  4. x = np.random.rand(N)
  5. y = np.random.rand(N)
  6. colors = np.random.rand(N)
  7. sizes = 1000 * np.random.rand(N)
  8. plt.figure(figsize=(10, 6))
  9. # 使用颜色表示第三个维度
  10. scatter = plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='viridis')
  11. plt.colorbar(scatter, label='颜色值')
  12. plt.title('散点图颜色设置示例')
  13. plt.xlabel('X轴')
  14. plt.ylabel('Y轴')
  15. plt.grid(True)
  16. plt.show()
复制代码

使用颜色区分类别:
  1. # 生成分类数据
  2. categories = np.random.randint(0, 3, size=N)
  3. category_colors = ['#1f77b4', '#ff7f0e', '#2ca02c']
  4. plt.figure(figsize=(10, 6))
  5. for i in range(3):
  6.     mask = categories == i
  7.     plt.scatter(x[mask], y[mask], c=category_colors[i], label=f'类别 {i}', alpha=0.7)
  8. plt.title('使用颜色区分类别的散点图')
  9. plt.xlabel('X轴')
  10. plt.ylabel('Y轴')
  11. plt.legend()
  12. plt.grid(True)
  13. plt.show()
复制代码

柱状图颜色设置

柱状图可以使用颜色来区分不同的类别或表示数值的大小。
  1. # 生成数据
  2. categories = ['A', 'B', 'C', 'D', 'E']
  3. values = np.random.randint(1, 10, size=len(categories))
  4. plt.figure(figsize=(10, 6))
  5. # 基本柱状图颜色设置
  6. bars = plt.bar(categories, values, color=['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd'])
  7. # 为每个柱子添加渐变效果
  8. for bar in bars:
  9.     bar.set_alpha(0.7)
  10.    
  11. plt.title('柱状图颜色设置示例')
  12. plt.xlabel('类别')
  13. plt.ylabel('值')
  14. plt.grid(True, axis='y')
  15. plt.show()
复制代码

使用颜色表示数值大小:
  1. # 生成更多数据
  2. categories = [f'类别 {i}' for i in range(1, 11)]
  3. values = np.random.randint(1, 20, size=len(categories))
  4. # 创建颜色映射
  5. norm = plt.Normalize(min(values), max(values))
  6. cmap = cm.get_cmap('viridis')
  7. colors = cmap(norm(values))
  8. plt.figure(figsize=(10, 6))
  9. bars = plt.bar(categories, values, color=colors)
  10. # 添加颜色条
  11. sm = cm.ScalarMappable(cmap=cmap, norm=norm)
  12. sm.set_array([])
  13. cbar = plt.colorbar(sm)
  14. cbar.set_label('值')
  15. plt.title('使用颜色表示数值大小的柱状图')
  16. plt.xlabel('类别')
  17. plt.ylabel('值')
  18. plt.xticks(rotation=45)
  19. plt.tight_layout()
  20. plt.show()
复制代码

等高线图颜色设置

等高线图使用颜色来表示不同高度或数值的区域,颜色映射的选择对数据的表达至关重要。
  1. # 生成网格数据
  2. delta = 0.025
  3. x = np.arange(-3.0, 3.0, delta)
  4. y = np.arange(-2.0, 2.0, delta)
  5. X, Y = np.meshgrid(x, y)
  6. Z = np.exp(-X**2 - Y**2)
  7. plt.figure(figsize=(10, 6))
  8. # 基本等高线图
  9. contour = plt.contourf(X, Y, Z, cmap='viridis')
  10. plt.colorbar(contour, label='Z值')
  11. plt.title('等高线图颜色设置示例')
  12. plt.xlabel('X轴')
  13. plt.ylabel('Y轴')
  14. plt.show()
复制代码

使用自定义颜色映射的等高线图:
  1. # 创建自定义颜色映射
  2. colors = [(0.8, 0.8, 1), (0.4, 0.4, 0.8), (0, 0, 0.6), (0, 0.6, 0), (0.6, 0.6, 0), (0.8, 0.8, 0)]
  3. custom_cmap = LinearSegmentedColormap.from_list('custom_cmap', colors)
  4. plt.figure(figsize=(10, 6))
  5. # 使用自定义颜色映射的等高线图
  6. contour = plt.contourf(X, Y, Z, levels=15, cmap=custom_cmap)
  7. plt.colorbar(contour, label='Z值')
  8. plt.title('使用自定义颜色映射的等高线图')
  9. plt.xlabel('X轴')
  10. plt.ylabel('Y轴')
  11. plt.show()
复制代码

颜色选择最佳实践

选择合适的颜色不仅能美化图表,还能提高数据的可读性和传达效果。以下是一些颜色选择的最佳实践。

考虑色盲友好

全球约有8%的男性和0.5%的女性患有某种形式的色盲,最常见的类型是红绿色盲。因此,在选择颜色时,应考虑色盲友好性。
  1. # 色盲友好的颜色方案
  2. colorblind_friendly_colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd',
  3.                              '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']
  4. plt.figure(figsize=(10, 6))
  5. for i in range(5):
  6.     plt.plot(x, np.sin(x) + i, color=colorblind_friendly_colors[i], label=f'Line {i+1}')
  7. plt.title('色盲友好的颜色方案')
  8. plt.xlabel('X轴')
  9. plt.ylabel('Y轴')
  10. plt.legend()
  11. plt.grid(True)
  12. plt.show()
复制代码

使用色盲模拟工具检查你的图表(需要安装colorspacious包):
  1. # 安装colorspacious: pip install colorspacious
  2. try:
  3.     from colorspacious import cspace_convert
  4.     from matplotlib.colors import to_rgb
  5.    
  6.     # 原始颜色
  7.     original_colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728']
  8.    
  9.     # 转换为色盲感知的颜色
  10.     deuteranopia_colors = []
  11.     for color in original_colors:
  12.         rgb = to_rgb(color)
  13.         # 转换为色盲感知的RGB
  14.         deuteranopia_rgb = cspace_convert(rgb, "sRGB1", "sRGB1-CVD")
  15.         deuteranopia_colors.append(deuteranopia_rgb)
  16.    
  17.     plt.figure(figsize=(12, 6))
  18.    
  19.     # 原始颜色
  20.     plt.subplot(1, 2, 1)
  21.     for i, color in enumerate(original_colors):
  22.         plt.plot(x, np.sin(x) + i, color=color, label=f'Line {i+1}')
  23.     plt.title('原始颜色')
  24.     plt.xlabel('X轴')
  25.     plt.ylabel('Y轴')
  26.     plt.legend()
  27.     plt.grid(True)
  28.    
  29.     # 色盲感知的颜色
  30.     plt.subplot(1, 2, 2)
  31.     for i, color in enumerate(deuteranopia_colors):
  32.         plt.plot(x, np.sin(x) + i, color=color, label=f'Line {i+1}')
  33.     plt.title('红色盲感知的颜色')
  34.     plt.xlabel('X轴')
  35.     plt.ylabel('Y轴')
  36.     plt.legend()
  37.     plt.grid(True)
  38.    
  39.     plt.tight_layout()
  40.     plt.show()
  41. except ImportError:
  42.     print("请安装colorspacious包以运行色盲模拟示例: pip install colorspacious")
复制代码

提高可读性

选择对比度适当的颜色可以提高图表的可读性,特别是在打印或黑白显示时。
  1. # 高对比度颜色方案
  2. high_contrast_colors = ['#000000', '#FF0000', '#0000FF', '#FFFF00', '#FF00FF', '#00FFFF']
  3. plt.figure(figsize=(10, 6))
  4. for i in range(4):
  5.     plt.plot(x, np.sin(x) + i, color=high_contrast_colors[i], label=f'Line {i+1}')
  6. plt.title('高对比度颜色方案')
  7. plt.xlabel('X轴')
  8. plt.ylabel('Y轴')
  9. plt.legend()
  10. plt.grid(True)
  11. plt.show()
复制代码

突出重点数据

使用颜色可以有效地突出显示重要数据或异常值。
  1. # 生成数据
  2. np.random.seed(42)
  3. x = np.linspace(0, 10, 50)
  4. y = np.sin(x) + np.random.normal(0, 0.1, 50)
  5. # 标记异常值
  6. threshold = 0.8
  7. outliers = np.abs(y - np.sin(x)) > threshold
  8. plt.figure(figsize=(10, 6))
  9. # 绘制正常数据点
  10. plt.scatter(x[~outliers], y[~outliers], color='#1f77b4', label='正常数据')
  11. # 突出显示异常值
  12. plt.scatter(x[outliers], y[outliers], color='#d62728', s=100, label='异常值')
  13. # 绘制理论曲线
  14. plt.plot(x, np.sin(x), 'k--', label='理论曲线')
  15. plt.title('使用颜色突出显示异常值')
  16. plt.xlabel('X轴')
  17. plt.ylabel('Y轴')
  18. plt.legend()
  19. plt.grid(True)
  20. plt.show()
复制代码

实际案例:综合应用颜色设置技巧

让我们通过一个实际案例来综合应用前面介绍的颜色设置技巧。假设我们要可视化一个数据集,其中包含不同类别的数据点,并且每个数据点都有一个关联的数值。
  1. # 生成示例数据集
  2. np.random.seed(42)
  3. N = 200
  4. x = np.random.rand(N) * 10
  5. y = np.random.rand(N) * 5
  6. categories = np.random.choice(['A', 'B', 'C'], size=N)
  7. values = np.random.rand(N) * 100
  8. # 为每个类别分配颜色
  9. category_colors = {'A': '#1f77b4', 'B': '#ff7f0e', 'C': '#2ca02c'}
  10. # 创建图形
  11. plt.figure(figsize=(12, 8))
  12. # 创建散点图,使用颜色区分类别,大小表示数值
  13. for category in ['A', 'B', 'C']:
  14.     mask = categories == category
  15.     # 根据数值调整点的大小
  16.     sizes = 20 + values[mask] * 2
  17.     # 使用透明度增强重叠点的可见性
  18.     plt.scatter(x[mask], y[mask], c=category_colors[category], s=sizes,
  19.                 alpha=0.7, label=f'类别 {category}')
  20. # 添加图例
  21. plt.legend(title='数据类别')
  22. # 添加颜色和大小说明
  23. plt.text(0.02, 0.98, '点的大小表示数值大小', transform=plt.gca().transAxes,
  24.          verticalalignment='top', bbox=dict(boxstyle='round', facecolor='white', alpha=0.7))
  25. # 添加标题和轴标签
  26. plt.title('综合应用颜色设置技巧的数据可视化', fontsize=14, fontweight='bold')
  27. plt.xlabel('X轴数值', fontsize=12)
  28. plt.ylabel('Y轴数值', fontsize=12)
  29. # 添加网格线
  30. plt.grid(True, linestyle='--', alpha=0.6)
  31. # 调整边距
  32. plt.tight_layout()
  33. # 显示图形
  34. plt.show()
复制代码

另一个实际案例是创建一个多系列折线图,使用颜色来区分不同的数据系列,并使用渐变填充来表示数据的不确定性。
  1. import pandas as pd
  2. import matplotlib.dates as mdates
  3. # 生成时间序列数据
  4. np.random.seed(42)
  5. dates = pd.date_range('2023-01-01', periods=100)
  6. series_names = ['销售', '成本', '利润']
  7. # 生成数据
  8. data = {}
  9. for name in series_names:
  10.     if name == '销售':
  11.         base = np.linspace(100, 200, 100)
  12.         noise = np.random.normal(0, 10, 100)
  13.         data[name] = base + noise
  14.     elif name == '成本':
  15.         base = np.linspace(80, 150, 100)
  16.         noise = np.random.normal(0, 8, 100)
  17.         data[name] = base + noise
  18.     else:  # 利润
  19.         data[name] = data['销售'] - data['成本']
  20. # 创建颜色映射
  21. series_colors = {'销售': '#1f77b4', '成本': '#d62728', '利润': '#2ca02c'}
  22. # 创建图形
  23. plt.figure(figsize=(14, 8))
  24. # 绘制每个数据系列
  25. for name in series_names:
  26.     # 主线
  27.     plt.plot(dates, data[name], color=series_colors[name], linewidth=2, label=name)
  28.    
  29.     # 不确定性区域(使用渐变填充)
  30.     uncertainty = np.abs(np.random.normal(0, 5, 100))  # 模拟不确定性
  31.     upper_bound = data[name] + uncertainty
  32.     lower_bound = data[name] - uncertainty
  33.    
  34.     # 使用半透明颜色填充不确定性区域
  35.     plt.fill_between(dates, upper_bound, lower_bound,
  36.                      color=series_colors[name], alpha=0.2)
  37. # 添加图例
  38. plt.legend(fontsize=12)
  39. # 添加标题和轴标签
  40. plt.title('公司财务指标时间序列(含不确定性区间)', fontsize=16, fontweight='bold')
  41. plt.xlabel('日期', fontsize=14)
  42. plt.ylabel('金额(千元)', fontsize=14)
  43. # 设置x轴刻度
  44. plt.gca().xaxis.set_major_locator(mdates.MonthLocator())
  45. plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
  46. plt.xticks(rotation=45)
  47. # 添加网格线
  48. plt.grid(True, linestyle='--', alpha=0.6)
  49. # 调整边距
  50. plt.tight_layout()
  51. # 显示图形
  52. plt.show()
复制代码

总结

在本文中,我们全面探讨了matplotlib中的线条颜色设置技巧,从基础的颜色代码到高级的自定义方法。我们学习了:

1. 基础颜色设置方法,包括颜色名称、十六进制颜色代码和RGB/RGBA元组。
2. 高级颜色设置技巧,如颜色循环、色彩映射和自定义颜色映射。
3. 不同类型图表(折线图、散点图、柱状图、等高线图)的颜色设置方法。
4. 颜色选择的最佳实践,包括考虑色盲友好性、提高可读性和突出重点数据。
5. 通过实际案例综合应用了各种颜色设置技巧。

通过掌握这些技巧,你可以创建更加生动、直观和专业的数据可视化图表,有效地传达数据中的信息和洞察。记住,好的颜色选择不仅要美观,还要服务于数据的表达和观众的体验。在实际应用中,根据你的具体需求和受众特点,灵活运用这些技巧,将使你的数据可视化工作更上一层楼。

最后,随着matplotlib的不断更新和发展,新的颜色设置功能和选项可能会被添加。因此,保持对最新版本的关注,并不断学习和实验新的技巧,将帮助你保持在数据可视化领域的前沿。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

手机版|联系我们|小黑屋|TG频道|RSS |网站地图

Powered by Pixtech

© 2025-2026 Pixtech Team.

>