前置
看到网络上绘制的这么漂亮的数学图形,觉得能够用一个代码绘制全部的这些图形,就能提高不少效率,所以于是就心血来潮:
这是一个绘制李萨如图并保存数据的Python代码示例。下面是每行注释的详细解释:
import os # 导入操作系统模块
from datetime import datetime # 导入日期时间模块
import numpy as np # 导入NumPy库
import matplotlib.pyplot as plt # 导入Matplotlib库
import pandas as pd # 导入Pandas库
# 创建文件夹函数
def create_directory(directory):
if not os.path.exists(directory): # 如果目录不存在
os.makedirs(directory) # 创建目录
# 检索可用英语字体函数
def search_english_font(directory):
font_files = os.listdir(directory) # 获取目录下的文件列表
for file in font_files:
if file.endswith(".ttf"): # 如果文件以".ttf"结尾
return os.path.join(directory, file) # 返回字体文件的完整路径
return None # 如果未找到可用的英语字体文件,返回None
# 绘制李萨如图函数
def plot_lissajous(a, b, delta):
t = np.linspace(0, 2*np.pi, 1000) # 在0到2*pi之间生成1000个点
x = np.sin(a*t + delta) # 计算x坐标
y = np.sin(b*t) # 计算y坐标
fig, ax = plt.subplots() # 创建图形和坐标轴对象
ax.plot(x, y) # 绘制曲线
ax.axis("equal") # 设置坐标轴刻度相等
ax.set_title("Lissajous Curve (a={}, b={}, delta={})".format(a, b, delta)) # 设置标题
return fig, ax # 返回图形和坐标轴对象
# 保存数据到excel和txt文件函数
def save_data(data, filename):
excel_path = os.path.join(directory_path, "代码print相关/结构图", filename + ".xlsx") # 构造Excel文件路径
data.to_excel(excel_path, index=False) # 将数据保存到Excel文件
print("数据已保存到:" + excel_path) # 打印保存成功的消息
txt_path = os.path.join(directory_path, "代码print相关/结构图", filename + ".txt") # 构造txt文件路径
data.to_csv(txt_path, sep="\t", index=False) # 将数据保存到txt文件
print("数据已保存到:" + txt_path) # 打印保存成功的消息
# 设置目录路径和文件名前缀
directory_path = "/storage/emulated/0/文件/"
prefix = "编号.库样式."
# 构造当前时间戳
timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
# 组合文件名前缀
filename_prefix = prefix + "Lissajous."
# 组合文件名
filename = filename_prefix + timestamp
# 构造完整文件路径
file_path = os.path.join(directory_path, "代码print相关/结构图", filename)
# 创建目录
create_directory(os.path.dirname(file_path))
# 检查中文字体是否存在
chinese_font_path = "/storage/emulated/0/文件/字体大全/字体包/宋体.ttf"
if not os.path.exists(chinese_font_path): # 如果中文字体文件不存在
chinese_font_path = "/storage/emulated/0/文件/字体大全/字体包/" # 设置备用路径
# 检索可用英语字体
english_font_directory = "/storage/emulated/0/文件/字体大全/"
english_font_path = search_english_font(english_font_directory)
# 打印注释
print("这个代码文件使用了以下字体:")
print("- 中文字体:" + chinese_font_path)
if english_font_path:
print("- 英文字体:" + english_font_path)
# 绘制李萨如图并保存数据
a = 3
b = 4
deltas = np.linspace(0, 2*np.pi, 9)[:-1] # 在0到2*pi之间生成8个delta值
for i, delta in enumerate(deltas):
fig, ax = plot_lissajous(a, b, delta) # 绘制李萨如图
data = pd.DataFrame({"x": ax.lines[0].get_xdata(), "y": ax.lines[0].get_ydata()}) # 获取曲线数据
save_data(data, filename + "." + str(i+1)) # 保存数据到文件
plt.show() # 显示绘制的图形
这个代码绘制李萨如图,并将数据保存到Excel和txt文件中。每行有趣的注释都描述了代码的功能和作用,这样就能更好地理解代码的逻辑和实现。
例中仅保存数据到Excel和txt文件,并未包含保存图片的部分。若保存图片文件,可以添加以下代码来保存图片:# 组合图片文件名
image_filename = filename_prefix + "Lissajous_" + str(i+1) + ".png"
# 构造图片文件路径
image_path = os.path.join(directory_path, "代码print相关/结构图", image_filename)
# 保存图片
fig.savefig(image_path)
print("图片已保存到:" + image_path)