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 FontManager
fm = FontManager()
mat_fonts = set(f.name  for f in fm.ttflist)
for i in mat_fonts:
    print(i)

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

#绘制正余弦函数图像
import numpy as np
import matplotlib.pyplot as plt

x = 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 np
import matplotlib.pyplot as plt

x = 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) -> zero
ax.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 plt
import numpy as np
x = np.linspace(0,10,10000)
y=0
for 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 t
t.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 plt
import numpy as np


def 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 np
import matplotlib.pyplot as plt
import matplotlib

plt.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雷达图

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值