200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Python语言程序设计基础科学计算与可视化小练习

Python语言程序设计基础科学计算与可视化小练习

时间:2022-09-06 08:30:11

相关推荐

Python语言程序设计基础科学计算与可视化小练习

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加

例如:第一章 Python 机器学习入门之pandas的使用

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

一些有的没的:​​​​​​​

以下为MacOS环境下实现的代码,windows可能略有不同。

如:matplotlib图例中中文乱码问题,一般代码会为

# matplotlib.rcParams['font.familt'] = 'SimHei'# matplotlib.rcParams['font.sans-serif'] = ['SimHei']

或​​​​​​​

plt.rcParams['font.sans-serif'] = ['SimHei']

这是黑体​​​​​​​

mac若是想同样使用这个字体可能需要添加、配置等一系列操作,可以通过搜索mac下matplotlib图例中中文乱码问题来找到解决方案,但因为比较麻烦,我选择换用宋体(win没有试过,但是感觉应该不影响,建议有兴趣的小伙伴试一下)

plt.rcParams['font.sans-serif'] = ['Songti SC']

查询自己可用的字体:

from matplotlib.font_manager import FontManagerfm = FontManager()mat_fonts = set(f.name for f in fm.ttflist)for i in mat_fonts:print(i)

一、画出正余弦三角函数图

#绘制正余弦函数图像import numpy as npimport matplotlib.pyplot as pltx = np.linspace(-10, 10, 1000)a = np.sin(x)b = np.cos(x)c = np.tan(x)# d = np.log(x)plt.rcParams['font.sans-serif'] = ['Songti SC']#解决中文乱码问题plt.figure(figsize=(8, 4))#图像框大小plt.plot(x, a, label='sin(x)', color='green', linewidth=0.5)#linewidth代表绘制出来线条的宽度plt.plot(x, b, label='cos(x)', color='red', linewidth=0.5)plt.plot(x, c, label='tan(x)', color='blue', linewidth=0.5)# plt.plot(x,d,label='$log(x)$',color='grey',linewidth=0.5)plt.xlabel('x')plt.ylabel('y')plt.title('三角函数')plt.xlim(0, 10)plt.ylim(-3, 3)# plt.xlim(xmin, xmax) xmin:x轴上的最小值、xmax:x轴上的最大值plt.legend(title='图例')#图例plt.show()

运行结果:

美化版:

# 绘制正余弦函数图像import numpy as npimport matplotlib.pyplot as pltx = np.linspace(-10, 10, 10000)a = np.sin(x)b = np.cos(x)c = np.tan(x)# d = np.log(x)plt.rcParams['font.sans-serif'] = ['Songti SC'] # 解决中文乱码问题plt.figure(figsize=(8, 4)) # 图像框大小plt.plot(x, a, label='sin(x)', color='green', linewidth=1) # linewidth代表绘制出来线条的宽度plt.plot(x, b, label='cos(x)', color='red', linewidth=1)plt.plot(x, c, label='tan(x)', color='blue', linewidth=1)# plt.plot(x,d,label='$log(x)$',color='grey',linewidth=0.5)# plt.gca(),全称是get current axis 意为获取当前轴ax = plt.gca()ax.spines['right'].set_color('none') # spines:matplotlib坐标轴设置ax.spines['top'].set_color('none')# 由于我们移动的是左边和底部的轴,所以不用设置这两个也可以ax.xaxis.set_ticks_position('bottom')ax.yaxis.set_ticks_position('left')# 指定data类型,就是移动到指定数值ax.spines['bottom'].set_position(('data', 0)) # ('data',0) -> zeroax.spines['left'].set_position(('data', 0))# ax.spines[‘bottom’]获取底部的轴,通过set_position方法,设置底部轴的位置,# 例如:ax.spines[‘bottom’].set_position((‘data’,0))表示设置底部轴移动到竖轴的0坐标位置,设置left的方法相同。plt.xlabel('x')plt.ylabel('y')plt.title('三角函数')plt.xlim(-4.5, 4.5)plt.ylim(-3, 3)# plt.xlim(xmin, xmax) xmin:x轴上的最小值、xmax:x轴上的最大值plt.legend(title='图例') # 图例plt.show()

运行结果:

关于Python数据处理Matplotlib轴的设置​​​​​​​​​​​​​​​​​​可以看下面👇这篇博客

4.13Python数据处理篇之Matplotlib系列(十三)---轴的设置 - 梦并不遥远 - 博客园

二、方波绘制

# 利用坐标点的矩阵绘方波import matplotlib.pyplot as pltimport numpy as npx = np.linspace(0,10,10000)y=0for k in range(1,1000):y = y+4*np.sin((2*k-1)*x)/((2*k-1)*np.pi)plt.plot(x,y,'r',label="w=1",linewidth=3)#这里r是线条为红色的意思 也可以像写为color='r',k是黑色plt.axis([0,10,-1.5,1.5])#四个变量分别是[xmin,xmax,ymin,ymax]plt.legend()plt.show()

​​​​​​​

三、心形线

(1)利用turtle库

这种比较简单只需要简单的数学知识

#用turtle库绘制心形线import turtle as tt.setup(500, 500)t.pencolor('red')t.pensize(2)t.penup()t.goto(0, 60)t.begin_fill()t.pendown()t.left(135)t.circle(42.3, 180)t.goto(0, -60)t.left(90)t.goto(60, 0)t.circle(42.3, 180)t.fillcolor('pink')t.end_fill()t.penup()t.exitonclick()#点击后就关闭窗口

​​​​​​​

(2)利用matplotlib和numpy

利用numpy和matplotlib绘制笛卡尔心形线绘制

# 利用numpy和matplotlib绘制笛卡尔心形线import matplotlib.pyplot as pltimport numpy as npdef cardioid_polar(a):theta = np.linspace(0, 2 * np.pi, 1000) # 生成角度graph = plt.subplot(1,1,1, polar=True) # 它把","省去了,生成一行一列,这是第一个图,plt.subplot('行','列','编号')# 生成了极坐标图r = a * (1 - np.sin(theta)) # 心形线极坐标表达式graph.plot(theta, r, color='red')# plt.savefig('./img/heart-polar.png')plt.show()cardioid_polar(1)

四、乒乓球选手

#乒乓球选手雷达图绘制import numpy as npimport matplotlib.pyplot as pltimport matplotlibplt.rcParams['font.sans-serif'] = ['Arial Unicode MS']# matplotlib.rcParams['font.familt'] = 'SimHei'# matplotlib.rcParams['font.sans-serif'] = ['SimHei']radar_labels = np.array(['爆发力','技巧熟练度','气势','稳定性','速度'])nAttr = 5 #边数data = np.array([[0.8,0.9,0.9,0.75],[0.85,0.87,0.9,0.9],[0.9,0.6,1.0,0.6],[0.8,0.7,0.7,0.9]])#数据值data_labels = ('马龙','张继科','马琳','王励勤')angles = np.linspace(0, 2*np.pi, nAttr, endpoint=False)#设定起点为0,末值为2pai、返回一个两端点间数值平均分布的长为nAtrr的数组angles,#表示从一个属性点到下一个属性点笔画需要旋转的角度data = np.concatenate((data,[data[0]]))#angles = np.concatenate((angles,[angles[0]]))#将数据和角度的数组首尾闭合起来,便于调用plot()函数#这两行一直报错fig = plt.figure(facecolor="white")plt.subplot(111,polar=True)plt.plot(angles,data,'o-', linewidth=2,alpha = 0.2)#会出现userwaring,但是可以正常运行plt.fill(angles,data,alpha=0.2)#plt.thetagrids(angles*180/np.pi,radar_labels,frac=1.2)#报错plt.thetagrids(angles*180/np.pi,radar_labels)plt.figtext(0.05, 0.97, '乒乓球选手雷达图', ha='left',size = 15)legend = plt.legend(data_labels,loc = (0.9,0.92),labelspacing = 0.1)plt.grid(True)#plt.savefig('乒乓球选手雷达图.jpg')plt.show()

参考:雷达图的绘制 (Python,matplotlib)_Rowlingz-CSDN博客_matplotlib雷达图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。