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

如何在Matplotlib中为笛卡尔叶形线分段着色并转换参数形式?

笛卡尔叶形线分段着色实现方案

需求说明

需要绘制笛卡尔叶形线$x^3 - 3xy + y^3 = 0$,并为**第二象限、第四象限及叶尖(第一象限闭合区域)**分别设置不同颜色。原使用contour函数仅能绘制单一颜色,无法实现分段着色,需通过参数化方程分段绘制。

参数化推导

笛卡尔叶形线的标准参数化可通过令$y = tx$代入原方程推导:

  1. 将$y = tx$代入$x^3 + y^3 = 3xy$,得:
    $x^3 + t3x3 = 3x(tx)$
  2. 化简后(排除$x=0$的奇点),得到参数方程:
    $$x = \frac{3t}{1 + t^3}, \quad y = \frac{3t^2}{1 + t^3}$$
  3. 参数$t$的取值对应不同象限区域:
    • 第二象限:$t ∈ (-∞, -1)$(此时$x<0, y>0$)
    • 叶尖(第一象限闭合区):$t ∈ (0, +∞)$(此时$x>0, y>0$)
    • 第四象限:$t ∈ (-1, 0)$(此时$x>0, y<0$)

实现代码

import matplotlib.pyplot as plt
import numpy as np

# 生成各分段的参数t数组,避开t=-1的奇点
# 第二象限:t从-100到-1.001
t_second = np.linspace(-100, -1.001, 1000)
x_second = 3 * t_second / (1 + t_second**3)
y_second = 3 * t_second**2 / (1 + t_second**3)

# 叶尖(第一象限):t从0.001到100
t_tip = np.linspace(0.001, 100, 1000)
x_tip = 3 * t_tip / (1 + t_tip**3)
y_tip = 3 * t_tip**2 / (1 + t_tip**3)

# 第四象限:t从-0.999到-0.001
t_fourth = np.linspace(-0.999, -0.001, 1000)
x_fourth = 3 * t_fourth / (1 + t_fourth**3)
y_fourth = 3 * t_fourth**2 / (1 + t_fourth**3)

# 分段绘制,设置不同颜色
plt.figure(figsize=(8,8))
plt.plot(x_second, y_second, color='#ff4444', label='第二象限')
plt.plot(x_tip, y_tip, color='#00aa00', label='叶尖区域')
plt.plot(x_fourth, y_fourth, color='#4444ff', label='第四象限')

# 设置坐标轴样式
plt.axhline(0, color='gray', linewidth=0.5)
plt.axvline(0, color='gray', linewidth=0.5)
plt.xlim(-5, 5)
plt.ylim(-5, 5)
plt.gca().set_aspect('equal', adjustable='box')
plt.legend()
plt.title('笛卡尔叶形线(分段着色)')
plt.show()

代码说明

  • 用linspace生成足够密集的参数t,确保曲线平滑;
  • 避开t=-1的奇点(此时分母为0),避免计算错误;
  • 每一段曲线使用不同颜色绘制,并添加图例区分;
  • 设置坐标轴相等比例,保证叶形线的形状正确显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:45:37