Python各类图形绘制—turtle与Matplotlib-13、弓形-圆弧
目录
Python各类图形绘制—turtle与Matplotlib-13、弓形-圆弧
前言
既然是学习数学,肯定会离不开各种图形,之前的文章中很多我都尽可能的不使用图来表示了,但是觉得不好,毕竟数学离开了图就会很抽象,所以我们这里单独的学习一下Python的各类图形绘制,包含绘制切线什么的,这样在数学学习的图像处理上就会好很多。
编号 | 中文名称 | 英文名称 | 图形说明 |
---|---|---|---|
1 | 点 | Point | 几何中最基本元素,无大小、长度、宽度、高度,仅表示位置,二维平面用坐标 (x, y) 确定位置 |
2 | 线段 | Line Segment | 直线上两点间的有限部分,有两个端点,可确定长度,由两端点坐标确定位置和长度 |
3 | 射线 | Ray | 由线段一端无限延长形成,有一个端点,另一端无限延伸,不可测量长度 |
4 | 直线 | Line | 没有端点,可向两端无限延伸,不可度量长度,平面直角坐标系中可用线性方程表示 |
5 | 角 | Angle | 由两条有公共端点的射线组成,公共端点是顶点,两条射线是边,用度数衡量大小 |
6 | 三角形 | Triangle | 同一平面内不在同一直线上的三条线段首尾顺次连接组成的封闭图形。按边分有等边(三边相等)、等腰(至少两边相等)、不等边三角形;按角分有锐角(三角皆锐角)、直角(一角为直角)、钝角(一角为钝角)三角形 |
7 | 四边形 | Quadrilateral | 由不在同一直线上的四条线段依次首尾相接围成的封闭的平面图形或立体图形。常见的有平行四边形(两组对边分别平行)、矩形(四个角为直角的平行四边形)、菱形(四条边相等的平行四边形)、正方形(四个角为直角且四条边相等的平行四边形)、梯形(一组对边平行,另一组对边不平行)等 |
8 | 五边形 | Pentagon | 由五条线段首尾相连组成的封闭图形,内角和为 540 度,正五边形五条边相等,五个角也相等 |
9 | 六边形 | Hexagon | 由六条线段首尾相连围成的封闭图形,内角和为 720 度,正六边形六条边相等,六个内角也相等,每个内角为 120 度 |
10 | 圆形 | Circle | 平面上到定点的距离等于定长的所有点组成的图形,定点称为圆心,定长称为半径。圆是轴对称图形,也是中心对称图形 |
11 | 椭圆 | Ellipse | 平面内到两个定点的距离之和等于常数(大于两定点间距离)的点的轨迹,这两个定点叫做椭圆的焦点,两焦点间的距离叫做焦距 |
12 | 扇形 | Sector | 一条圆弧和经过这条圆弧两端的两条半径所围成的图形,扇形面积与圆心角(顶角)、圆半径相关 |
13 | 弓形 | Segment of a circle | 由弦及其所对的弧组成的图形,可分为劣弧弓形(小于半圆)和优弧弓形(大于半圆) |
开发环境
系统:win11
开发语言:Python
使用工具:Jupyter Notebook
使用库:turtle与Matplotlib
turtle_demo
代码示例:
import turtle
import math
def draw_arc(t, radius, start_angle, extent_angle):
"""
绘制一段圆弧
:param t: turtle对象
:param radius: 圆弧半径
:param start_angle: 起始角度(以度为单位)
:param extent_angle: 弧度延伸的角度(以度为单位)
"""
t.circle(radius, extent=extent_angle)
def draw_bow_chart():
screen = turtle.Screen()
screen.title("弓形图示例")
t = turtle.Turtle()
t.speed(2)
# 绘制坐标轴
t.penup()
t.goto(-300, 0)
t.pendown()
t.goto(300, 0)
t.penup()
t.goto(0, -200)
t.pendown()
t.goto(0, 200)
# 示例数据
categories = ["A", "B", "C", "D"]
values = [10, 30, 40, 20]
total = sum(values)
start_angle = -90 # 从y轴负半轴开始
for i, value in enumerate(values):
extent_angle = (value / total) * 180
t.penup()
t.goto(-250 + i * 200 / len(categories), 0)
t.setheading(start_angle)
t.pendown()
draw_arc(t, 150, start_angle, extent_angle)
t.penup()
t.goto(-250 + i * 200 / len(categories), -10)
t.write(categories[i])
t.hideturtle()
turtle.done()
if __name__ == '__main__':
draw_bow_chart()
效果示例:
Matplotlib_demo-半圆与圆弧
代码示例:
import matplotlib.pyplot as plt
import numpy as np
def draw_arc_chart():
fig, ax = plt.subplots()
# 圆弧的参数
radius = 1
start_angle = 30 # 起始角度(度)
end_angle = 120 # 结束角度(度)
# 将角度转换为弧度
theta = np.linspace(np.deg2rad(start_angle), np.deg2rad(end_angle), 100)
# 计算圆弧上的点的坐标
x = radius * np.cos(theta)
y = radius * np.sin(theta)
# 绘制圆弧
ax.plot(x, y, color='blue')
# 标注中心点
ax.plot(0, 0, 'ro') # 使用红色圆点标注中心
ax.text(0, 0, 'Center', horizontalalignment='center', verticalalignment='center')
# 标注起始角度和结束角度的弧度值
ax.text(radius * np.cos(np.deg2rad(start_angle)), radius * np.sin(np.deg2rad(start_angle)),
f'{np.rad2deg(np.deg2rad(start_angle)):.1f}°', fontsize=9, ha='center', va='bottom')
ax.text(radius * np.cos(np.deg2rad(end_angle)), radius * np.sin(np.deg2rad(end_angle)),
f'{np.rad2deg(np.deg2rad(end_angle)):.1f}°', fontsize=9, ha='center', va='top')
# 设置坐标轴范围
padding = 0.1
ax.set_xlim(-radius - padding, radius + padding)
ax.set_ylim(-radius - padding, radius + padding)
# 隐藏坐标轴
ax.axis('off')
plt.show()
if __name__ == '__main__':
draw_arc_chart()
效果示例:
代码示例:
import matplotlib.pyplot as plt
def draw_bow_chart():
# 示例数据
categories = ['A', 'B', 'C', 'D']
values = [10, 30, 40, 20]
colors = ['#ff9999','#66b3ff','#99ff99','#ffcc99']
# 绘制饼图
fig, ax = plt.subplots()
wedges, texts, autotexts = ax.pie(values, labels=categories, colors=colors,
autopct='%1.1f%%', startangle=90,
pctdistance=0.85)
# 绘制弓形图的白色圆心部分(模拟环形效果)
centre_circle = plt.Circle((0, 0), 0.70, fc='white')
fig.gca().add_artist(centre_circle)
# 等比例显示,确保是圆形
ax.axis('equal')
plt.tight_layout()
plt.show()
if __name__ == '__main__':
draw_bow_chart()
效果示例: