如何利用自定义函数生成极坐标散点图并绘制正弦极曲线?
解决极坐标曲线无数据点的问题
咱们一步一步来排查你的代码问题,很快就能画出想要的正弦极坐标曲线:
问题根源分析
你的代码有两个核心问题导致只显示框架没数据:
- 角度单位不匹配:Matplotlib的极坐标
projection='polar'要求角度参数是弧度,但你传入的是0-360的角度值,这会让所有点都跑到极坐标的"外圈以外"(360弧度等于57.3圈,远超默认显示范围),自然看不到。 - 数组维度错误:你的自定义函数返回的是三维数组,取出来的
Theta和STheta是二维数组(形状(1,72)),而plot需要一维数组作为输入。
另外,你的函数里用循环逐个append元素完全没必要,numpy本身就支持数组直接操作,代码可以大幅简化。
修正后的完整代码
import numpy as np import matplotlib.pyplot as plt def GenerateTrigonometryTable(x): # 直接生成角度数组(0到360,步长x) A = np.arange(0, 360, x) # 计算正弦、余弦,用deg2rad转弧度更直观 B = np.sin(np.deg2rad(A)) C = np.cos(np.deg2rad(A)) # 返回二维数组,每一行对应一组角度、正弦、余弦值 return np.column_stack((A, B, C)) # 获取数据并处理成绘图所需格式 trig_table = GenerateTrigonometryTable(5) theta_rad = np.deg2rad(trig_table[:, 0]) # 把角度转成弧度 s_theta = trig_table[:, 1] # 绘制极坐标曲线 ax1 = plt.subplot(111, projection='polar') ax1.plot(theta_rad, s_theta) # 可选美化:调整极坐标显示习惯 ax1.set_theta_direction(-1) # 角度顺时针增加 ax1.set_theta_zero_location('N') # 0度指向正北 ax1.set_rticks([-1, -0.5, 0, 0.5, 1]) # 设置径向刻度 plt.show()
关键改动说明
- 简化自定义函数:去掉冗余的循环append,直接用
np.column_stack生成结构化的二维数组,更高效易读。 - 统一角度单位:用
np.deg2rad将角度值转成弧度,匹配Matplotlib极坐标的要求。 - 调整数组维度:通过索引
trig_table[:, 0]直接获取一维的角度数组,避免二维数组导致的绘图问题。 - 如果你想要散点图而不是曲线,只需要把
ax1.plot改成ax1.scatter(theta_rad, s_theta)就行。
内容的提问来源于stack exchange,提问作者JCrispy
相关产品推荐
相关产品推荐

