Bug一堆,先别用,等我改改(也许吧)
电动电子基础实验要画图,手残画不好,遂写python画一个
写了对前15行非数据行的处理,所以不用删
数据起始结束位置没有算前15行,如果你要精准从某个数据点开始,记得把行数减去15
show_dot要用多个的自己在最后面加
matplotlib没有的话装一下
pip install matplotlib
写的比较答辩,如果优化了记得发我一份(qq:1398736695)
以下是脚本:
import matplotlib.pyplot as plt
filename = 'Design2.bod' # 导出的数据文件名,记得放到脚本同目录下
X_name = 'f/Hz' # X轴
Y_name = 'H(电压比)' # Y轴
# Y_name = 'φ/deg' # Y轴
begin = 400 # 数据起始位置(大概就是你想从得到的数据的第几行开始画)
end = 890 # 结束位置
title = "幅频特性曲线" #表头
x1, y1 = 59.578, 0.707 #要标注的点的坐标
l1 = '半功率点' # 标注点的名字
def show_dot(xx, yy, ll=''):
plt.scatter([xx], [yy], s=25, c='r')
plt.plot([0, xx], [yy, yy], c='b', linestyle='--')
plt.plot([xx, xx], [0, yy], c='b', linestyle='--')
plt.text(xx, yy, ll, ha='left', va='bottom', fontsize=10)
plt.text(xx*1.02, 0, f'{xx}', ha='left', va='bottom', fontsize=10)
plt.text(0, yy, f'{yy}', ha='right', va='center', fontsize=10)
with open(filename, 'r') as f:
for _ in range(15):
f.readline()
Frequency = []
Gain = []
Phase = []
line = f.readline()
i=0
while line:
tmp = line.split()
fr, g, p = eval(tmp[0]), eval(tmp[2]), eval(tmp[3])
Frequency.append(fr)
Gain.append(g)
Phase.append(p)
line = f.readline()
plt.rcParams["font.sans-serif"]=["SimHei"]
plt.rcParams["axes.unicode_minus"]=False
plt.plot(Frequency[begin:end], Gain[begin:end], color='blue',linewidth=2)
plt.title(title)
plt.xlabel(X_name)
plt.ylabel(Y_name)
# 去掉上、右边框
ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
# 移到原点
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))
# 标点
show_dot(x1, y1, l1)
# show_dot(x2, y2, l2)
plt.show()
plt.figure().savefig(f'{filename}.png')