在Python中如何将圆等分为36份并实现指定可视化效果?
问题:将圆等分为36份的Python实现
背景
我在Python中处理一个涉及投影几何节点(X、Y坐标)的任务,已通过以下代码绘制出包含几何图形及外围圆的图表:
from matplotlib import pyplot as plt, patches plt.rcParams["figure.figsize"] = [9.00, 6.50] plt.rcParams["figure.autolayout"] = True fig = plt.figure() ax = fig.add_subplot() # 其他plt.scatter或plt.plot代码 plt.scatter(x_new, y_new) # x_new和y_new是坐标列表 circle1 = plt.Circle((0, 0), radius=4, fill = False) # 圆心(0,0)、半径4的空心圆 ax.add_patch(circle1) ax.axis('equal') plt.show()
现有图表显示一个以原点为中心的空心圆,内部分布着若干散点。
需求
需要将该圆等分为36份,实现从圆心向外绘制36条射线,把圆均匀分割成36个扇形的效果。
解决方案
可以借助numpy生成均匀分布的角度,计算每个角度对应的圆周上的点,再从圆心向这些点绘制直线即可。修改后的完整代码如下:
from matplotlib import pyplot as plt, patches import numpy as np plt.rcParams["figure.figsize"] = [9.00, 6.50] plt.rcParams["figure.autolayout"] = True fig = plt.figure() ax = fig.add_subplot() # 绘制原有散点 plt.scatter(x_new, y_new) # 绘制外围圆 circle1 = plt.Circle((0, 0), radius=4, fill=False) ax.add_patch(circle1) # 将圆36等分,生成36个均匀分布的角度(0到2π,不含终点避免重复) angles = np.linspace(0, 2 * np.pi, 36, endpoint=False) radius = 4 # 遍历每个角度,绘制从圆心到圆周的射线 for angle in angles: x = radius * np.cos(angle) y = radius * np.sin(angle) ax.plot([0, x], [0, y], color='black', linewidth=0.8) ax.axis('equal') plt.show()
关键说明
np.linspace(0, 2*np.pi, 36, endpoint=False):生成0到2π之间的36个均匀间隔角度,endpoint=False确保最后一个角度不会和第一个角度重复,避免画出重复的射线。- 每个角度对应的圆周坐标通过三角函数计算:
x = 半径*cos(角度),y = 半径*sin(角度)。 - 用
ax.plot([0,x], [0,y])绘制从原点(0,0)到圆周点(x,y)的直线,实现分割效果。
内容的提问来源于stack exchange,提问作者Urvesh
相关产品推荐
相关产品推荐

