numpy和matplotlib使用
Numpy库
一、概述。
numpy 库处理的最基础数据类型是由同种元素构成的多维数组(ndarray),简称“数组”。 数组中所有元素的类型必须相同,数组中元素可以用整数索引,序号从0开始。ndarray 类型的维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。一维数组的秩为1,二维数组的秩为2,二维数组相当于由两个一维数组构成。
为了使代码简洁,用以下方法引用:
import numpy as np
二、常用创建数组函数。
部分实例代码如下:
1 import numpy as np 2 print('(1)\n',np.array([1,2,3],dtype=int)) #创建数组,dtype是数据的类型 3 print('(2)\n',np.arange(1,10,2)) #x到y,i为步长 4 print('(3)\n',np.linspace(1,10,10)) #x到y,等分成n个元素 5 print('(4)\n',np.random.rand(3,3)) #随机生成m行n列的数组 6 print('(5)\n',np.ones((2,2),int)) #全为一 7 c = np.indices((3,3)) #创建m行n列的数组 8 print('(6)\n',c)
三、nadarray类(数组)。
(1)常用属性。
(2)形态操作方法。
部分实例代码如下:
1 c1 = np.array([[1,2,3],[4,5,6],[7,8,9]]) #创建数组c1=[[1,2,3],[4,5,6],[7,8,9]] 2 print('(7)\n',c1) 3 print("数组的结构{},总个数{},类型{},每个字节的大小{}".format(c1.shape,c1.size,c1.dtype,c1.itemsize))
四、算术运算函数。
在进行数组运算时,可以先将原始数组进行复制,再进行操作。这样在后续操作过程中就不会改变原始数组的值。(用上面的数组c1)
c2 = c1.copy() #复制,这样之后的计算就不会改变原数组
其它运算函数:
ps : numpy库还提供了
①一些比较运算函数;
②标准的三角函数:sin()、cos()、tan()。arcsin,arccos,和 arctan 函数返回给定角度的 sin,cos 和 tan 的反三角函数。这些函数的结果可以通过 numpy.degrees() 函数将弧度转换为角度。
③舍入函数:numpy.around() 函数返回指定数字的四舍五入值,等等。
部分代码实例:
1 print("(9)\n",np.ceil(c2)) #numpy.ceil():返回大于或者等于指定表达式的最小整数,即向上取整 2 print("(10)\n",np.floor(c2)) #np.floor()返回不大于输入参数的最大整数。(向下取整)
Matplotlib库
一、概述。
matplotlib 是提供数据绘图功能的第三方库,其pyplot 子库主要用于实现各种数据展示图形的绘制。可与numpy库搭配使用,是数据可视化的重要方法。
为了使代码简洁,用以下方法引用:
import matplotlib.pyplot as plt
二、应用。
matplotlib.pyplot 库默认情况不支持中文,若用中文标识图表,可在代码中用以下方法:
1 import matplotlib 2 matplotlib.rcParams['font.family'] = 'KaiTi' 3 matplotlib.rcParams['font.sans-serif'] = ['KaiTi'] #KaiTi为楷体
实例:
1 import matplotlib.pyplot as plt 2 import numpy as np 3 import matplotlib 4 matplotlib.rcParams['font.family'] = 'KaiTi' 5 matplotlib.rcParams['font.sans-serif'] = ['KaiTi'] 6 x = np.arange(1,11) 7 y = 2 * x + 5 8 plt.title("测试") 9 plt.xlabel('x轴') 10 plt.ylabel('y轴') 11 plt.plot(x,y,'oc') 12 plt.show()
代码解析:
plt.title('')设置标题;
plt.xlabel('')设置x轴名称;
plt.ylabel('')设置y轴名称;
plt.plot(x,y,'oc') 根据x,y绘制直/曲线条;其中'oc'为设置的标记和标记颜色的简略使用(o圆标记,c青色)。(详见如下)
plt.show() 展现图。
上面代码,图呈现如下:
样式与颜色设置:
三、具体的图表函数。
(1)图标绘制。
ps : 还可以用plt 绘制极坐标图、饼图、功率谱密度图、谱图、散点图、直方图、数据日期,等等图表。
(2)读取和显示函数。
! 用plt.imsave()进行保存。
四、plt 库的绘图区域函数。
(1)使用figure()函数创建一个全局绘图区域:plt.figure(figsize=(8,4))(单位英寸)
(2)subplot()都用于在全局绘图区域内创建子绘图区域,其参数表示将全局绘图区域分成nrows 行和ncols 列,并根据先行后列的计数方式在plot_number 位置生成一个坐标系。【plt.subplot(r , c , d) : 全局绘图区域被风割成 r × c 的网格,其中,在第d个位置绘制了一个坐标系】
——>若想在同一图中绘制不同的东西,就可以用plt.subplot()函数。实例如下:
1 import numpy as np 2 import matplotlib.pyplot as plt 3 # 计算正弦和余弦曲线上的点的 x 和 y 坐标 4 x = np.arange(0, 3 * np.pi, 0.1) 5 y_sin = np.sin(x) 6 y_cos = np.cos(x) 7 # 建立 subplot 网格,高为 2,宽为 1 8 # 激活第一个 subplot 9 plt.subplot(2, 1, 1) 10 # 绘制第一个图像 11 plt.plot(x, y_sin) 12 plt.title('Sin') 13 # 将第二个 subplot 激活,并绘制第二个图像 14 plt.subplot(2, 1, 2) 15 plt.plot(x, y_cos) 16 plt.title('Cos') 17 # 展示图像 18 plt.show()
ps : 在设置x轴范围是有个参数“0.1”,这是为了让函数图像平滑,也就是绘制0.1步长的点。如果不设置,就会出现下列结果。
1 from PIL import Image 2 import numpy as np 3 vec_el = np.pi/2.2 #光源的俯视角度,弧度值 4 vec_az = np.pi/4. #光源的方位角度,弧度 5 depth =10. #(0-100) 6 im = Image.open("********").convert('L') 7 a = np.asarray(im).astype('float') 8 grad= np.gradient(a) #取图像灰度的梯度值 9 grad_x,grad_y= grad #分别取横纵图像梯度值 10 11 grad_x = grad_x*depth/100. 12 grad_y = grad_y*depth/100. 13 dx = np.cos(vec_el)*np.cos (vec_az) #光源对x轴的影响 14 dy =np.cos (vec_el)*np.sin(vec_az) #光源对y轴的影响 15 dz = np.sin(vec_el) 16 A = np.sqrt(grad_x**2+grad_y**2 + 1.) 17 uni_x = grad_x/A 18 uni_y = grad_y/A 19 uni_z = 1./A 20 a2 = 255*(dx*uni_x+dy*uni_y+dz*uni_z) 21 a2 = a2.clip(0,255) 22 im2 = Image.fromarray(a2.astype('uint8')) 23 im2.save('*****')
原图:
手绘效果展示:
绘制python123作业雷达图
此处小编用更加好用的pyecharts库进行绘制,代码如下:
1 from pyecharts import Radar 2 radar = Radar("2019310143110","python123作业成绩") 3 data = [[80,110,100,97,110,80]] #成绩 4 week = [("第一周",80),("第二周",110),("第三周",100),("第四周",100),("第五周",110),("第六周",80)] #80,110等数据为满分情况 5 radar.config(week) 6 radar.add("作业成绩",data,is_label_show = True) 7 radar.render("m.html")
自由落体位移,图实现
import matplotlib.pyplot as plt import numpy as np import matplotlib matplotlib.rcParams['font.family'] = 'KaiTi' matplotlib.rcParams['font.sans-serif'] = ['KaiTi'] x = np.arange(0, 60 , 0.1) y = 9.8*pow(x,2)/2000 plt.title("初速度为0,加速度为9.8m/s的加速运动的位移s(自由落体位移)") plt.xlabel('时间t/秒') plt.ylabel('位移s/千米') plt.plot(x,y,'-.r') plt.show()
知识来源
[1]Python语言程序设计 . 北京理工大学 嵩天 . 科学计算与可视化。
[2]菜鸟驿站 . numpy的学习。