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

如何用笛卡尔坐标系轴完美包围极坐标图?

极坐标与笛卡尔轴对齐及色条位置调整解决方案

问题描述

希望实现XY轴(笛卡尔坐标)完美包围极坐标轴,同时将色条放置在坐标轴外侧。当前代码生成的图中,笛卡尔轴与极坐标未对齐,色条位置也不符合需求。原代码如下:

import matplotlib.pyplot as plt
import numpy as np

# Random data
r = np.random.randn(1000)
theta = np.random.randn(1000)

fig = plt.figure()

axc = plt.subplot(236)
ax = plt.subplot(236, projection='polar')
ax.set(xticklabels=[], yticklabels=[])
ax.grid(False)
hist, phi_edges, r_edges = np.histogram2d(theta, r, bins=50)
axc.set_xlim(-r_edges[-1], r_edges[-1])
axc.set_ylim(-r_edges[-1], r_edges[-1])
X, Y = np.meshgrid(phi_edges, r_edges)
pc = ax.pcolormesh(X, Y, hist.T)
cbar = fig.colorbar(pc)
cbar.set_label("Counts", rotation=270, labelpad=15)

原效果图:
原生成图

解决方案

修改后的代码

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
r = np.random.randn(1000)
theta = np.random.randn(1000)

# 创建画布和笛卡尔坐标轴
fig, axc = plt.subplots()
# 在笛卡尔轴的位置上叠加极坐标轴
ax = fig.add_subplot(111, projection='polar', frameon=False)
# 让极坐标轴与笛卡尔轴位置完全对齐
ax.set_position(axc.get_position())

# 隐藏极坐标的刻度和网格
ax.set(xticklabels=[], yticklabels=[])
ax.grid(False)

# 计算二维直方图
hist, phi_edges, r_edges = np.histogram2d(theta, r, bins=50)
max_r = r_edges[-1]
# 设置笛卡尔轴范围,刚好包围极坐标的最大半径
axc.set_xlim(-max_r, max_r)
axc.set_ylim(-max_r, max_r)
# 强制坐标轴等比例,避免图形拉伸变形
axc.set_aspect('equal')

# 绘制极坐标热力图
X, Y = np.meshgrid(phi_edges, r_edges)
pc = ax.pcolormesh(X, Y, hist.T)

# 将色条放置在笛卡尔轴右侧,保持合适间距
cbar = fig.colorbar(pc, ax=axc, pad=0.1)
cbar.set_label("Counts", rotation=270, labelpad=15)

plt.show()

关键改动说明

  • 解决子图冲突:不再重复使用同一个子图位置创建双轴,改为先创建笛卡尔轴,再叠加极坐标轴并对齐位置,避免布局混乱。
  • 保证等比例显示:给笛卡尔轴添加set_aspect('equal'),确保XY轴长度一致,完美包围圆形极坐标图。
  • 调整色条位置:调用fig.colorbar时指定关联笛卡尔轴,并设置pad参数让色条固定在坐标轴外侧,避免覆盖图形。
  • 精准设置轴范围:提取极坐标的最大半径,直接用它定义笛卡尔轴的X/Y范围,确保刚好包裹极坐标区域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:55:11