Python 绘制图表
所需库Matplotlib、numpy
Matplotlib 是一个用于绘制二维图形的 Python 库,广泛用于数据可视化。它提供了各种绘图选项,能够创建折线图、散点图、柱状图、饼图、3D 图形等多种图形,使用户能够直观地呈现和理解数据。
以下是 Matplotlib 的一些主要特点和组成部分:
- 灵活性和广泛的图形支持: Matplotlib 提供了丰富的图形支持,包括折线图、散点图、柱状图、饼图、3D 图形等。用户可以轻松创建各种类型的图形。
- 交互式绘图: Matplotlib 可以集成到 IPython 等交互式环境中,支持实时修改和交互。
- 支持多种输出格式: Matplotlib 可以将图形保存为各种图像格式,如 PNG、JPEG、PDF 等,也可以直接嵌入到各种 GUI 界面中。
- 丰富的配置选项: 用户可以通过修改配置文件或者使用代码中的配置选项,自定义图形的外观、风格和布局。
- 直观的 API: Matplotlib 的 API 设计直观,用户可以通过简洁的代码生成复杂的图形。
- 支持 LaTeX 渲染: Matplotlib 支持使用 LaTeX 渲染文本,这使得用户能够在图中插入数学符号和公式。
Matplotlib 主要由两个子模块组成:
- pyplot: 提供了一个类似 MATLAB 的绘图接口,使用户能够使用简单的命令生成图形。例如,使用
plt.plot()
创建折线图。 - matplotlib.figure: 提供了一个面向对象的接口,允许用户更灵活地控制图形的属性和布局。
numpy
NumPy(Numerical Python)是一个用于科学计算的强大库,提供了支持大型多维数组和矩阵的高性能数学函数以及用于操作这些数组的工具。它是 Python 数据科学生态系统中的核心组件之一,为科学计算、数据分析和机器学习等领域提供了基础。
以下是 NumPy 的一些主要特点和功能:
-
多维数组对象: NumPy 提供了
numpy.ndarray
类型,它是一个多维数组对象,可以表示向量、矩阵和更高维的数组。这使得 NumPy 成为处理大规模数据集和执行高性能数学运算的理想工具。 -
广播功能: NumPy 支持广播(broadcasting),这是一种在不同形状的数组之间执行操作的机制。广播功能使得对不同形状的数组执行元素级运算变得更加灵活和方便。
-
数学函数: NumPy 包含了大量的数学函数,包括基本的运算(加、减、乘、除等)、三角函数、指数和对数函数、线性代数运算等。这些函数的实现是高度优化的,能够在大规模数据集上高效运行。
-
随机数生成: NumPy 提供了用于生成各种概率分布的随机数的功能,例如正态分布、均匀分布等。
-
索引和切片: NumPy 提供了强大的索引和切片功能,允许用户高效地访问和操作数组的子集。
-
集成其他语言: NumPy 通过 C 和 Fortran 语言的库进行底层实现,因此在性能方面非常高效。它还支持与其他语言(如 C、C++、Fortran)的集成,使得在这些语言中编写的代码可以直接与 NumPy 交互。
-
广泛应用: NumPy 在数据科学、机器学习、图像处理、信号处理等领域被广泛应用。许多其他科学计算的库和工具(例如 SciPy、pandas 和 scikit-learn)都建立在 NumPy 的基础之上。
以下是一个简单的 NumPy 使用示例,展示了如何创建一个一维数组、进行数学运算和使用广播功能:
import numpy as np
# 创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])
# 数学运算
arr2 = arr1 * 2
# 广播功能
arr3 = arr1 + arr2
print("Original Array:", arr1)
print("Multiplied by 2:", arr2)
print("Sum of Arrays:", arr3)
这个示例创建了一个一维数组,对其进行了数学运算和广播操作。这只是 NumPy 的一小部分功能,您可以根据需要深入学习并利用其更多的强大功能。
常见问题
一、绘图区标题出现乱码解决方法:
1、在使用中文前增加字体设定
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
2、在使用中文字符串时指定Unicode编码格格式
plt.title(u'在给定的线段上做等边三角形')
通过绘制等边三角形的绘图Demo
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
TextStep = 0.2;
# 定义底线,用于撑开坐标轴
x_line0 = [0, 10]
y_line0 = [0, 0]
# 绘制线段
plt.plot(x_line0, y_line0, color='white')
x_line0 = [0, 0]
y_line0 = [0, 10]
plt.plot(x_line0, y_line0, color='white')
# 初始图-----------Begin-----------
# 定义线段的起点和终点坐标
x_line = [5, 8]
y_line = [4, 4]
# 绘制线段
plt.plot(x_line, y_line, label='Line AB', marker='o')
# 在线段端点处添加文本标签
plt.text(x_line[0] - TextStep, y_line[0], 'A', ha='right', va='center', fontsize=12, fontweight='bold')
plt.text(x_line[1] + TextStep, y_line[1], 'B', ha='left', va='center', fontsize=12, fontweight='bold')
# 初始图-----------End-----------
# Step1-----------Begin-----------
# 绘制圆
# 定义圆的参数
center = (x_line[0], y_line[0])
radius = x_line[1] - x_line[0]
# 创建角度数组,用于绘制圆
theta = np.linspace(0, 2*np.pi, 100)
# 计算圆上的点的坐标
x_circle = center[0] + radius * np.cos(theta)
y_circle = center[1] + radius * np.sin(theta)
#, linestyle='dashed'
plt.plot(x_circle, y_circle, label='Circle1')
plt.text(x_line[0] - radius - TextStep, y_line[1], 'D', ha='right', va='center', fontsize=12, fontweight='bold')
plt.text(x_line[0] + radius /2, y_line[1] + radius - TextStep, 'C', ha='center', va='bottom', fontsize=12, fontweight='bold')
# Step1-----------end-----------
# Step2-----------Begin-----------
# 绘制圆
# 定义圆的参数
center = (x_line[1], y_line[1])
radius = x_line[1] - x_line[0]
# 创建角度数组,用于绘制圆
theta = np.linspace(0, 2*np.pi, 100)
# 计算圆上的点的坐标
x_circle = center[0] + radius * np.cos(theta)
y_circle = center[1] + radius * np.sin(theta)
#, linestyle='dashed'
plt.plot(x_circle, y_circle, label='Circle2')
plt.text(x_line[1] + radius + TextStep, y_line[1], 'E', ha='right', va='center', fontsize=12, fontweight='bold')
# Step2-----------end-----------
# Step3-----------Begin-----------
# 定义线段的起点和终点坐标
x_line1 = [x_line[0], x_line[0] + radius /2]
y_line1 = [y_line[0], y_line[0] + radius * np.sin(np.radians(60))]
# 绘制线段
plt.plot(x_line1, y_line1, label='Line AC', marker='o')
x_line1 = [x_line[1], x_line[0] + radius /2]
y_line1 = [y_line[0], y_line[0] + radius * np.sin(np.radians(60))]
plt.plot(x_line1, y_line1, label='Line BC', marker='o')
# Step3-----------End-----------
# 添加标签和标题
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.title(u'在给定的线段上做等边三角形')
# 设置X轴和Y轴等比例
plt.axis('equal')
# 显示图例
plt.legend()
# 显示图形
plt.show()