如何用Matplotlib创建中心及交界线偏白的2D四象限渐变图
实现四象限相位填充图表(中心及交界线偏白)
需求说明
需要创建一个2D填充图表,四个象限分别对应四种不同相位颜色,要求中心区域及坐标轴交界线区域偏白,替代原代码中离散的散点图效果。
原代码问题分析
- 使用
plt.scatter只能生成离散点,无法填满整个区域 - 网格点数量过少(仅10个)导致边缘效果粗糙
- 仅考虑了径向距离的颜色混合,未处理坐标轴交界线的白色过渡
解决方案代码
步骤1:导入依赖库
import numpy as np import matplotlib.pyplot as plt
步骤2:定义颜色与混合逻辑
直接使用RGB数值计算混合色(比十六进制转换更高效):
# 定义各颜色的RGB值(范围0-1) COLORS = { 'red': (1.0, 0.0, 0.0), 'green': (0.0, 1.0, 0.0), 'blue': (0.0, 0.0, 1.0), 'yellow': (1.0, 1.0, 0.0), 'white': (1.0, 1.0, 1.0) } def get_mixed_color(x, y): # 计算径向距离因子(中心到角落的过渡) r = np.sqrt(x**2 + y**2) R = np.sqrt(2) # 角落点到中心的最大距离 radial_factor = r / R radial_factor = np.clip(radial_factor, 0, 1) # 防止超出范围 # 计算轴向距离因子(坐标轴到角落的过渡) axis_factor = min(abs(x), abs(y)) axis_factor = np.clip(axis_factor, 0, 1) # 计算颜色权重:仅在角落(径向+轴向都最大)时颜色最深 color_weight = radial_factor * axis_factor white_weight = 1 - color_weight # 根据象限选择基础颜色 if x > 0 and y > 0: base_color = COLORS['blue'] elif x > 0 and y < 0: base_color = COLORS['yellow'] elif x < 0 and y > 0: base_color = COLORS['red'] elif x < 0 and y < 0: base_color = COLORS['green'] else: # 坐标轴或中心直接返回白色 return COLORS['white'] # 混合基础颜色与白色 mixed_r = base_color[0] * color_weight + COLORS['white'][0] * white_weight mixed_g = base_color[1] * color_weight + COLORS['white'][1] * white_weight mixed_b = base_color[2] * color_weight + COLORS['white'][2] * white_weight return (mixed_r, mixed_g, mixed_b)
步骤3:生成密集网格并绘制填充图
# 生成密集网格(100x100点,保证平滑填充) x = np.linspace(-1, 1, 100) y = np.linspace(-1, 1, 100) X, Y = np.meshgrid(x, y) # 计算每个网格点的颜色 color_grid = np.array([[get_mixed_color(xi, yi) for xi in x] for yi in y]) # 绘制填充图 plt.figure(figsize=(8, 8)) plt.pcolormesh(X, Y, color_grid, shading='gouraud') # gouraud shading让过渡更平滑 plt.axis('equal') # 保持坐标轴比例一致 plt.axis('off') # 隐藏坐标轴(无需网格线) plt.tight_layout() plt.show()
代码说明
- 密集网格:使用100x100的网格点,替代原10x10的稀疏点,确保填充效果平滑
- 双因子权重:同时考虑径向距离(中心→角落)和轴向距离(坐标轴→角落)的权重,保证中心和交界线区域偏白
- 平滑填充:使用
pcolormesh配合gouraudshading,实现连续的颜色过渡,完全填满区域 - 坐标轴处理:直接对坐标轴上的点返回白色,强化交界线的偏白效果
内容的提问来源于stack exchange,提问作者bad_chemist
相关产品推荐
相关产品推荐

