一.python123成绩雷达图
import numpy as np import matplotlib.pyplot as plt import matplotlib matplotlib.rcParams['font.family']='SimHei' matplotlib.rcParams['font.sans-serif']=['SimHei'] labels=np.array(['作业1','作业2','作业3','作业4','作业5']) #标签 nAttr=5 data=np.array([19,16,18,19,8]) # 作业的数据 angles=np.linspace(0,2*np.pi,nAttr,endpoint=False) data=np.concatenate((data,[data[0]])) angles=np.concatenate((angles,[angles[0]])) fig=plt.figure(facecolor="white") #背景颜色 plt.subplot(111,polar=True) plt.plot(angles,data,'bo-',color='g',linewidth=2) plt.fill(angles,data,facecolor='g',alpha=0.25) #填充颜色 plt.thetagrids(angles*180/np.pi,labels) plt.figtext(0.52,0.95,'潘巧妍的成绩表',ha='center') plt.grid(True) plt.savefig('panq,JPG') plt.show() |
结果如图:
二.numpy库读书笔记
1.numpy库不用安装,树莓派Python v3默认安装已经包含了numpy。
2.numpy:支持N维数组运算、处理大型矩阵(Matrix)、成熟的广播函数库、矢量运算、线性代数、傅里叶变换、随机数生成,并可与C++/Fortran语言无缝结合。
3.常用的数组创建函数
导入模块:import numpy as np
(1)np.array([x,y,z],dtype=int):从python列表和元组创建数组(dtyoe为数据类型)
>>> np.array([1, 2, 3, 4, 5]) # 把列表转换为数组
array([1, 2, 3, 4, 5])
(2)np.arrange(x,y,i):创建一个从x到y,以i为步长的数组
>>> np.arange(1, 10, 2)
array([1, 3, 5, 7, 9])
(3)np.linspace(x,y,n):创建一个由x到y,等分成n个元素的数组
>>> np.linspace(0, 10, 11) # 等差数组,包含11个数
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
(4)np.indices((m,n)):创建一个m行n列的矩阵
(5)np.ones((m,n),dtype):创建一个m行n列全为1的数组,dtype是数据类型
>>> np.ones((3,3)) # 全1二维数组
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
(6)np.empty((m,n),dtype):创建一个m行n列全为0的数组
>>> np.empty((3,3)) # 空数组,只申请空间而不初始化,元素值是不确定的
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
(7)np.zeros((m,n),dtype): 创建一个m行n列全为0的数组
np.zeros((3,3)) # 全0二维数组,3行3列
[[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]]
(8)np.identity(n) :创建n行n列单位矩阵
>>> np.identity(3) # 单位矩阵
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
4.实现数组转置
(1)一维数组转置后还是一样的
>>> a = np.array((1, 2, 3, 4))
>>> a
array([1, 2, 3, 4])
>>> a.T # 一维数组转置以后和原来是一样的
array([1, 2, 3, 4])
(2)matrix()标准矩阵运算(一维数组可以实现转置)
>>> a4=[1,2,3,4]
>>> a5=np.matrix(a4)
>>> a5
matrix([[1, 2, 3, 4]])
>>> a5.T
matrix([[1],
[2],
[3],
[4]])
(2)正常情况下
>>> b = np.array(([1, 2, 3], [4, 5, 6], [7, 8, 9]))
>>> b
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> b.T # 转置
array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
三.matplotlib读书笔记
1.matplotlib是提供数据绘图功能的第三分库,其子库pyplot主要用于实现各种数据展示图像的绘制。
引用代码:
import matplotlib.pyplot as plt import matplotlib matplotlib.rcParams['font.family']='SimHei' #为了正确显示中文字体,第3、4行代码是必须的 matplotlib.rcParams['font.sans-serif']=['SimHei'] |
以下将使用plt代替matplotlib.pyplot。
2.plt库的绘图区域函数
plt.figure(figsize=None,figcolor=None):创建一个全局绘图区域
plt.axes(rect,axisbg='w'):创建一个坐标系风格的子绘图区域(rec=[left,bottom,width,height],axisbg指背景色)
plt.subplot(nrows,ncols,plot_number):在全局绘图区域中创建一个子绘图区域
(nrows为行,ncols为列,根据先行后列的计数方式在plot_number位置生成一个坐标系)
plt.subplot(324):全局绘图区域被分割成3x2的网格,,其中在第四个位置绘制了一个坐标系
plt.axes()默认创建一个subplot(111)坐标系
四.自定义手绘图
from PIL import Image import numpy as np a=np.asarray(Image.open(r'C:/Users/Asus/Desktop/媌.jpg').convert('L')).astype('float') depth=10 grad=np.gradient(a)#取图像灰度的梯度值 grad_x,grad_y=grad#分别取横纵图像梯度值 grad_x=grad_x*depth/100 grad_y=grad_y*depth/100 A=np.sqrt(grad_x**2+grad_y**2+1) uni_x=grad_x/A uni_y=grad_y/A uni_z=1/A vec_el=np.pi/2.2#光源的俯视角度,弧度值 vec_az=np.pi/4 #光源的方位角度,弧度值 dx=np.cos(vec_el)*np.cos(vec_az) dy=np.cos(vec_el)*np.cos(vec_az) dz=np.sin(vec_el) b=255*(dx*uni_x+dy*uni_y+dz*uni_z)#光源归一化 b=b.clip(0,255) im=Image.fromarray(b.astype('uint8'))#重构图像 im.save(r'C:/Users/Asus/Desktop/panq.jpg') |
原图: 手绘效果: