Multisim导出数据采用Python绘图

Multisim导出数据采用Python绘图

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')

你可能感兴趣的:(python,matplotlib,数据分析)