You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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()

代码说明

  1. 密集网格:使用100x100的网格点,替代原10x10的稀疏点,确保填充效果平滑
  2. 双因子权重:同时考虑径向距离(中心→角落)和轴向距离(坐标轴→角落)的权重,保证中心和交界线区域偏白
  3. 平滑填充:使用pcolormesh配合gouraud shading,实现连续的颜色过渡,完全填满区域
  4. 坐标轴处理:直接对坐标轴上的点返回白色,强化交界线的偏白效果

内容的提问来源于stack exchange,提问作者bad_chemist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:55:20