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

如何更优实现90-270度数据在笛卡尔平面散点图以0为中心?

更优的实现方式

先提个小问题:你原代码里的导入写错了,应该是import matplotlib.pyplot as plt,不是import matplotlib as plt,不然运行会报错。

下面是几个更简洁、可维护性更高的优化方向:

1. 简化角度转换逻辑

你当前的角度转换公式可以改成更直观的写法,效果完全一致,但可读性更强:

ang = np.array([0, 90, 270])
radi = [1, 2, 3]

# 把0-360度映射到-180-180度区间
ang_converted = np.mod(ang - 180, 360) - 180

这个公式的逻辑是:先把所有角度偏移180度,取模360后再偏移回-180度基准,比你原来的嵌套运算更易懂。

2. 自动生成轴标签,不用手动写死

不需要手动创建labels列表,直接根据转换后的x轴位置映射回原始角度就行,数据变了也不用改标签代码:

fig, ax = plt.subplots()
ax.scatter(ang_converted, radi)

# 按转换后的角度排序,匹配原始角度作为刻度标签
sorted_indices = np.argsort(ang_converted)
ax.set_xticks(ang_converted[sorted_indices])
ax.set_xticklabels(ang[sorted_indices], rotation='vertical')

3. 可选:固定x轴范围,强化0为中心的视觉效果

如果想让图表更明显地以0为中心,可以手动设置x轴的上下限:

ax.set_xlim(-180, 180)

这样x轴的中点正好是0,视觉上完全符合你的需求。

完整优化后的代码

import numpy as np
import matplotlib.pyplot as plt

ang = np.array([0, 90, 270])
radi = [1, 2, 3]

# 角度转换为-180~180区间
ang_converted = np.mod(ang - 180, 360) - 180

fig, ax = plt.subplots()
ax.scatter(ang_converted, radi)

# 自动匹配刻度与原始角度标签
sorted_idx = np.argsort(ang_converted)
ax.set_xticks(ang_converted[sorted_idx])
ax.set_xticklabels(ang[sorted_idx], rotation='vertical')

# 可选:固定x轴范围,强化中心视觉
ax.set_xlim(-180, 180)

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:26:21