numpy和matplotlib使用

Numpy库

一、概述。

  numpy 库处理的最基础数据类型是由同种元素构成的多维数组(ndarray),简称“数组”。 数组中所有元素的类型必须相同,数组中元素可以用整数索引,序号从0开始。ndarray 类型的维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。一维数组的秩为1,二维数组的秩为2,二维数组相当于由两个一维数组构成。

  为了使代码简洁,用以下方法引用:

import numpy as np 

二、常用创建数组函数。

 部分实例代码如下:

1 import numpy as np 
2 print('(1)
',np.array([1,2,3],dtype=int)) #创建数组,dtype是数据的类型
3 print('(2)
',np.arange(1,10,2))          #x到y,i为步长
4 print('(3)
',np.linspace(1,10,10))        #x到y,等分成n个元素
5 print('(4)
',np.random.rand(3,3))  #随机生成m行n列的数组
6 print('(5)
',np.ones((2,2),int))  #全为一  
7 c = np.indices((3,3))         #创建m行n列的数组
8 print('(6)
',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)
',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)
",np.ceil(c2))           #numpy.ceil():返回大于或者等于指定表达式的最小整数,即向上取整
2 print("(10)
",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() 展现图。

上面代码,图呈现如下:

 样式与颜色设置:

'-'      实线样式 
'--'     短横线样式 
'-.'     点划线样式 
':'      虚线样式 
'.'      点标记 
','      像素标记 
'o'     圆标记 
'v'     倒三角标记 
'^'     正三角标记 
'<'  左三角标记 
'>' 右三角标记 
'1'     下箭头标记
'2'     上箭头标记 
'3'     左箭头标记 
'4'     右箭头标记 
's'     正方形标记 
'p'     五边形标记 
'*'     星形标记 
'h'     六边形标记 1 
'H'    六边形标记 2 
'+'     加号标记 
'x'      X 标记 
'D'     菱形标记 
'd'     窄菱形标记 
'|' 竖直线标记 
'_'     水平线标记 

以下是颜色的缩写:
'b'                       蓝色 
'g'                       绿色 
'r'                        红色 
'c'                       青色 
'm'                   品红色 
'y'                       黄色 
'k'                       黑色 
'w'                      白色 

三、具体的图表函数。

(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的学习。

原文地址:https://www.cnblogs.com/nicefurmine/p/12837946.html