Python程序设计之Matplotlib图形

数据的快速生成
arange函数进行采样

实现:

import numpy as np
p=np.arange(0,1,0.1) #arange函数需要三个参数,分别为起始点、终止点、采样间隔。

if __name__ == '__main__':
    print(p)

输出结果:
在这里插入图片描述

实现:

import numpy as np
p=np.arange(0,5.6) #arange函数需要三个参数,分别为起始点、终止点、采样间隔。
#采样间隔默认值为1

if __name__ == '__main__':
    print(p)

输出结果:
在这里插入图片描述

linspace函数进行采样

import numpy as np
p=np.linspace(1,10,10) #linspace函数指定开始值、终止值和元素个数来创建一维数组

if __name__ == '__main__':
    print(p)

输出结果:
在这里插入图片描述

import numpy as np
p= np.linspace(1,10,endpoint=False) #linspace函数指定开始值、终止值和元素个数来创建一维数组
#可以通过endpoint=True关键字指定是否包括终值,缺省设置是包括终值
if __name__ == '__main__':
    print(p)

输出结果:
在这里插入图片描述

Numpy提供了大量函数,计算速度快

import numpy as np
x=np.arange(0,np.pi/2,0.1)  #arange函数三个参数,分别为起始点、终止点、采样间隔。
y=np.sin(x)  #把所有点的函数值,一次求得


if __name__ == '__main__':
    print(y)

输出结果:
在这里插入图片描述

#step 1 引用
import matplotlib.pyplot as plt
import numpy as np
#step 2 准备数据
x=np.arange(-np.pi,np.pi,0.1)  #arange函数三个参数,分别为起始点、终止点、采样间隔。
y=np.sin(x)   #把所有点的函数值,一次求得
#step 3 制图
plt.plot(x,y,'b') #'b'代表使用蓝色画曲线
#step 4 显示图形
plt.show()

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

#使用xlim(x1,x2)设定横轴坐标,ylin(y1,y2)设置纵轴坐标
x=np.arange(-5,5,0.1) #arange函数需要三个参数,分别为起始点、终止点、采样间隔。
y=x**2
plt.xlim(-5,5) #设定横坐标范围
plt.ylim(0,100) #设定纵坐标范围
plt.xlabel("x") #横轴标识
plt.ylabel("y=x*x") #纵轴标识
plt.title("Plot y=x*x") #设定图形的标题
plt.plot(x,y)	#制图
plt.show()

在这里插入图片描述

#特别指定坐标轴的刻度,制作更能表达深意的图形,xticks(yticks)方法实现了这个功能 
import numpy as np
from pylab import *
x=np.linspace(-np.pi,np.pi,100)
#linspace函数指定开始值、终止值和元素个数来创建一维数组
cos=np.cos(x)  #把所有点的函数值,一次求得
xticks(np.linspace(-np.pi,np.pi,5))   #linspace函数指定开始值、终止值和元素个数来创建一维数组
plot(x,cos,color='red',linewidth=2.0,linestyle='-') #制图,设置一些属性
show()

在这里插入图片描述

 
#plot的label参数
import numpy as np
from pylab import *
x=np.linspace(-np.pi,np.pi,100)  #linspace函数指定开始值、终止值和元素个数来创建一维数组
sin,cos=np.sin(x),np.cos(x)   #把所有点的函数值,一次求得
plot(x,sin,color='blue',linewidth=2.0,linestyle='-',label='sin') #制图,设置一些属性
plot(x,cos,color='red',linewidth=2.0,linestyle='-',label='cos') #制图,设置一些属性
legend(loc='upper left') #为每条折线添加图例
show()

在这里插入图片描述

#饼图
import numpy as np
import matplotlib.pyplot as plt
data = np.random.randint(1,11,5)  #随机数生成模块
plt.pie(data,explode=[0,0,0.2,0,0]) #explode的第三个参数为0.2,意味着对应饼块被拖出饼
plt.show()

在这里插入图片描述

#散点图
from pylab import *
import numpy as np
n=100
x=np.random.normal(0,1,n)	#随机数生成模块
y=np.random.normal(0,1,n)	#随机数生成模块
scatter(x,y)	#绘制散点图
show()

在这里插入图片描述

#柱图+折线图
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.family']='sans-serif' 	#自定义样式控制
mpl.rcParams['font.sans-serif']=[u'SimHei']	#自定义样式控制
data=np.random.randint(1,10,10)		#随机数生成模块
x=np.arange(len(data))	
plt.plot(x,data,color='r')	#制图,同时设置一些属性
plt.bar(x,data,alpha=.5,color='b',width=0.2)	#制柱形图,同时设置一些属性
plt.show()

在这里插入图片描述

#子窗口制图
import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(0,5,10)	#linspace函数指定开始值、终止值和元素个数来创建一维数组
y=x**2

#subplot(numRows, numCols, plotNum)
#图表的整个绘图区域被分成 numRows 行和 numCols 列
#然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1

plt.subplot(1,2,1)		
plt.plot(x,y,'r--')		#制图,同时设置一些属性
plt.subplot(1,2,2)
plt.plot(y,x,'g*-')		#制图,同时设置一些属性
plt.show()

在这里插入图片描述

如何设定下图的参数?
答:

#子窗口制图
import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(0,5,10)  #linspace函数指定开始值、终止值和元素个数来创建一维数组
y=x**2

#subplot(numRows, numCols, plotNum)
#图表的整个绘图区域被分成 numRows 行和 numCols 列
#然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1

plt.subplot(2,1,1)
plt.plot(x,y,'r--')       #制图,同时设置一些属性
plt.subplot(2,1,2)
plt.plot(y,x,'g*-')       #制图,同时设置一些属性
plt.show()

在这里插入图片描述

指定图的大小和分辨率
指定图形的分辨率、大小和长宽比例(aspect ratio)
通过subplots函数中的figsize、dpi等参数实现
如创建一个800*600像素、100dpi(每英寸100点)分辨率的图形,可以使用如下语句

import numpy as np
import matplotlib.pyplot as plt

#linspace函数指定开始值、终止值和元素个数来创建一维数组
x=np.linspace(0,5,10)
y=x**2
fig,axes=plt.subplots(figsize=(8,6),dpi=100)	#绘制子图
axes.plot(x,y,'r')	#制图,同时设置一些属性
axes.set_xlabel('x')		#横轴标识
axes.set_ylabel('y')		#纵轴标识
axes.set_title('title')	#设置标题
plt.show()

在这里插入图片描述

三维图
除了要引用matplotlib外,
还需要引用mpl_toolkits.mplot3d库
还需要在matplotlib的figure函数生成实例对象后,设置其制图模式为3d

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig=plt.figure()	#创建自定义图像
ax=fig.add_subplot(111,projection='3d') ##“111”表示“1×1网格,第一子图”
X=[0,1,2,1.5]	#设置X坐标
Y=[0,4,4,1]	#设置Y坐标
Z=[0,2,0,0]	#设置Z坐标
ax.plot_trisurf(X,Y,Z) 
# Tri 的每一行都定义了三角形的一个面,其实现方式是对包含 X、Y 和 Z 顶点的向量或矩阵进行索引,以此来定义面。

plt.show()

在这里插入图片描述

三维曲面plot_trisurf

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

n_angles=36	#设置角度
n_radii=8
radii=np.linspace(0.125,1.0,n_radii)	
#linspace函数指定开始值、终止值和元素个数来创建一维数组
#可以通过endpoint=True关键字指定是否包括终值,缺省设置是包括终值
angles=np.linspace(0,2*np.pi,n_angles,endpoint=False)
angles=np.repeat(angles[...,np.newaxis],n_radii,axis=1)
#angles [...,np.newaxis] 将angles转置,将每个元素转化成一个列表
x=np.append(0,(radii*np.cos(angles)).flatten())
y=np.append(0,(radii*np.sin(angles)).flatten())
#flatten作用是将矩阵的行之间首位相接连接成一个一维矩阵
z=np.sin(-x*y)	#把所有点的函数值,一次求得
fig=plt.figure()	#创建自定义图像
ax=fig.gca(projection='3d')	#进入3d图形制作模式

ax.plot_trisurf(x,y,z,cmap=plt.get_cmap('rainbow'),linewidth=0.2)
# Tri 的每一行都定义了三角形的一个面,其实现方式是对包含 X、Y 和 Z 顶点的向量或矩阵进行索引,以此来定义面。
#同时可以设置线的颜色和线的宽度
plt.show()

在这里插入图片描述

三维曲面plot_surface

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.mlab as mlab

delta=0.025
x=np.arange(-3.0,3.0,delta)    #arange函数需要三个参数,分别为起始点、终止点、采样间隔。
y=np.arange(-2.0,2.0,delta)    #arange函数需要三个参数,分别为起始点、终止点、采样间隔。
X,Y=np.meshgrid(x,y)      #生成网格型数据
Z1=mlab.bivariate_normal(X,Y,1.0,1.0,0.0,0.0)#产生双变量正态分布,四个整数分别为:x和y的方差,x和y的均值
Z2=mlab.bivariate_normal(X,Y,1.5,0.5,1,1)   #产生双变量正态分布,四个整数分别为:x和y的方差,x和y的均值
#difference of Gaussians
Z=10.0*(Z2-Z1)
#使用默认色创建带标签轮廓图
fig=plt.figure()
ax=fig.gca(projection='3d') #进入3d图形制作模式

ax.plot_surface(X,Y,Z,cmap=plt.get_cmap('rainbow'),linewidth=0.2) #绘制图案,设置颜色,设置线的宽度
plt.show()

在这里插入图片描述

三维曲面plot_surface+scatter

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from random import seed,random
import matplotlib.mlab as mlab

fig=plt.figure()    #创建自定义图像
ax=fig.gca(projection='3d') #进入3d图形制作模式
x_surf=np.arange(0,1,0.01) #产生x坐标
y_surf=np.arange(0,1,0.01) #产生y坐标
x_surf,y_surf=np.meshgrid(x_surf,y_surf)    #产生网格
z_surf=np.sqrt(x_surf+y_surf)  #产生z坐标
ax.plot_surface(x_surf,y_surf,z_surf) #画3d曲面
n=100;seed(0) #随机种子,产生可重复的数据,既程序每次运行结果一样
x=[random()for i in range(n)] #产生随机点
y=[random()for i in range(n)] #产生随机点
z=[random()for i in range(n)] #产生随机点
ax.scatter(x,y,z) #画3d散点图
ax.set_xlabel('x label');	#设置x标签
ax.set_ylabel('y label'); #设置y标签
ax.set_zlabel('z label'); #设置z标签
plt.show()

在这里插入图片描述

为三维曲面绘制等高线

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.mlab as mlab

delta=0.025
x=np.arange(-3.0,3.0,delta)    #arange函数需要三个参数,分别为起始点、终止点、采样间隔。
y=np.arange(-2.0,2.0,delta)    #arange函数需要三个参数,分别为起始点、终止点、采样间隔。
X,Y=np.meshgrid(x,y)      #生成网格型数据
Z1=mlab.bivariate_normal(X,Y,1.0,1.0,0.0,0.0)#产生双变量正态分布,四个整数分别为:x和y的方差,x和y的均值
Z2=mlab.bivariate_normal(X,Y,1.5,0.5,1,1)   #产生双变量正态分布,四个整数分别为:x和y的方差,x和y的均值
#difference of Gaussians
Z=10.0*(Z2-Z1)
#使用默认色创建带标签轮廓图
fig=plt.figure()
ax=fig.gca(projection='3d') #进入3d图形制作模式

ax.plot_surface(X,Y,Z,cmap=plt.get_cmap('rainbow'),linewidth=0.2) #绘制图案,设置颜色,设置线的宽度

#X,Y,Z准备完毕
plt.figure()
CS=plt.contour(X,Y,Z,10)    #制作等高线,横砍10刀
plt.clabel(CS,inline=1,fontsize=10) #inline控制画标签,移除标签下的线
plt.title('Simplest default with labels')
plt.show()

在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只爭朝夕不負韶華

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值