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

如何用Matplotlib的mosaic创建含笛卡尔与极坐标的双子图

修改Matplotlib subplot_mosaic实现笛卡尔+极坐标子图

要实现左侧笛卡尔坐标系、右侧极坐标系的水平排列子图,只需对现有代码做3处关键修改:

修改点说明

  • 调整子图布局:将原来垂直排列的两行一列,改为水平排列的一行两列
  • 指定极坐标投影:给右侧子图设置projection="polar"参数
  • 适配极坐标绘图数据:极坐标需要极角(θ)和半径(r),原信号s有正负值,需处理为非负半径(比如加偏移),同时将t转换为极角所需的弧度单位(Matplotlib极坐标默认角度单位为弧度)

修改后的完整代码

import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0, 30, 0.1)
s = np.sin(2 * np.pi * 1 * t)
# 处理半径为非负值,避免极坐标绘图异常
r = s + 1  

fig = plt.figure(layout="constrained")
ax_dict = fig.subplot_mosaic(
    # 改为水平一行两列的布局
    [["signal1", "signal2"]],
    # 给右侧子图指定极坐标投影
    ax_kw={"signal2": {"projection": "polar"}}
)

# 左侧笛卡尔坐标系绘图
ax_dict["signal1"].plot(t, s)
ax_dict["signal1"].set_title("笛卡尔坐标系")
ax_dict["signal1"].set_xlabel("时间t")
ax_dict["signal1"].set_ylabel("信号值s")

# 右侧极坐标系绘图:将t转为弧度作为极角,r作为半径
ax_dict["signal2"].plot(t, r)
ax_dict["signal2"].set_title("极坐标系")
ax_dict["signal2"].set_rmax(2)  # 设置最大半径显示值

plt.show()

额外说明

  • 如果希望极角使用角度单位,可将t转为弧度后传入:t * np.pi / 180
  • 若不需要保留信号正负信息,也可以用np.abs(s)作为半径,根据需求选择即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:57:43