matplotlib.pyplot是绘制各类可视化图形的命令子库,我们一般使用这一子模块来进行一些图形绘制从而实现数据可视化。
首先我们将库导入
import matplotlib.pyplot as plt #导入pyplot
import numpy as np
我们先来看一段代码
plt.plot([1,2,3,4]) #生成列表
plt.ylabel('numbers') #对Y轴进行命名
plt.show() #展示图形
这段代码中,plot作为pyplot内置的函数,可用于接受参数,如果只接受了一个列表或者是一个一维数组,那么matplotlib就会假设这个序列是Y轴上的取值,并且会自动为你生成X轴上的值(从0开始),长度与Y的长度相同。
通常来说,plot函数可以这样表示:
plt.plot(x, y, format_string)
其中x,y表示坐标,format_string是字符串格式的,表示颜色和线的类型,有以下的形式:
我们可以看看下面的例子
plt.plot([1,2,3,4],[1,4,9,16],'r.')
plt.show()
结果如下
我们还可以使用axis函数接收一个list,设定横纵坐标尺度,如下所示
plt.axis([0,8,0,12])
list各个参数分别代表[X初始刻度,X终止刻度,Y起始刻度,Y终止刻度]
我们可以用这种办法设定X和Y轴,而后用plot函数绘制图像,代码如下
plt.axis([0,8,0,8]) #绘制一个X和Y轴都为0-8的坐标系
plt.plot([1,3,5,7],[1,3,5,7],'g:') #绘制一条绿色虚线
plt.show()
当然,我们可以同时绘制多条线段,代码如下
a=np.arange(0.,8.,0.2) #创建一个从0到8,步长为0.2的等差数组
plt.plot(a,a,'g:',a,a**2,'b-',a,a**3,'rv') #分别绘制y=x,y=x^2,y=x^3的三条线段
plt.show()
结果如下
当然,plot绘制的线还有很多属性,举一些简单的例子如下
a=np.arange(8) #创建0到8的等差数列
plt.plot(a,a,linestyle='dotted',marker="1",markersize='5' ,color="r",linewidth=2) #绘制线条
plt.show()
结果如下
linestyle 线条样式 ;marker 标记风格 ;markersize 标记大小 ;color线条颜色,linewidth线条宽度等等,总的有以下这些
在此不一一展示。
通常我们使用numpy导入数据进行绘图,否则仅靠我们定义的列表无法完成大部分我们需要的图形绘制,比如我们可以试试绘制正弦和余弦函数的图像。
x=np.linspace(-np.pi,np.pi)
x1=np.sin(x)
x2=np.cos(x)
plt.plot(x,x1,'b-',x,x2,'r-')
plt.show()
结果如下
我们还可以在同一图中绘制不同的东西。这时需要用到subplot() 函数
以下实例绘制正弦和余弦值:
x=np.linspace(-np.pi,np.pi)
x1=np.sin(x)
x2=np.cos(x)
# 绘制第一个图像
plt.subplot(1, 2, 1) #建立 subplot 网格,长为 1,宽为 2
plt.plot(x, x1)
plt.title('Sin(x)') #对第一个图像命名
# 绘制第二个图像
plt.subplot(1, 2, 2) #建立第二个 subplot 网格,长为 1,宽为 2
plt.plot(x, x2)
plt.title('Cos(x)') #对第二个图像命名
# 展示图像
plt.show()
我们还可以使用pyplot绘制直方图,示例代码如下
data = np.random.randn(10000)
plt.hist(data, bins=40, normed=1, facecolor="green", edgecolor="black", alpha=0.7)
# 显示横轴标签
plt.xlabel("count")
# 显示纵轴标签
plt.ylabel("Probability")
# 显示图标题
plt.title("gram")
plt.show()
绘制直方图
data:必选参数,绘图数据
bins:直方图的长条形数目,可选项,默认为10
normed:是否将得到的直方图向量归一化,可选项,默认为0,代表不归一化,显示频数。normed=1,表示归一化,显示频率。
facecolor:长条形的颜色
edgecolor:长条形边框的颜色
alpha:透明度
我们可以使用pie函数来绘制饼图,示例代码如下
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
labels = ['努力','运气','天赋','人品','金钱','其它'] #设置每块饼的标签
sizes = [40,10,20,20,10,10] #设置每块饼所占比例
explode = (0.1,0,0,0,0,0) #表示饼图每个饼的突出程度
plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150)
plt.title("成功是怎么炼成的") #标题
plt.show()
sizes:每块饼所占比例;explode:每个饼的’突出程度;autopct 表示显示数据的格式; shadow表示二维饼图;startangle表示起始的角度。
主要参考Python之Matplotlib数据可视化(七):用Matplotlib画三维图_ywsydwsbn的博客-CSDN博客
Matplotlib 原本只能画二维图。大概在 1.0 版本的时候,Matplotlib 实现了一些建立在二维图基础上的三维图功能,于是一组画三维图可视化的便捷(尚不完美)工具便诞生了。我们可以导入 Matplotlib 自带的 mplot3d
工具箱来画三维图
首先导入库
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
导入这个子模块之后,就可以在创建任意一个普通坐标轴的过程中加入 projection='3d'
关键字,从而创建一个三维坐标轴。
如下所示
sd = plt.axes(projection='3d')
plt.show()
最基本的三维图是由 (x , y , z )
三维坐标点构成的线图与散点图。可以用 sd.plot3D
与 sd.scatter3D` 函数来创建它们。
简单来说,我们可以用sd.plot3D绘制线图,用sd.scatter3D绘制散点图。具体用法如下
#定义XYZ数据
zline=np.linspace(0,15,1000)
xline=np.sin(zline)
yline=np.cos(zline)
d.plot3D(xline,yline,zline,'red') #绘制线图
plt.show()
结果如下
同样的,二维绘图的命名方式也适用于三维绘图,在此不多加赘述。
下面我们导入一个现有的坐标文件实现三维绘图,代码如下
filename='bunny.txt' #将文件名赋值为变量
X,Y,Z=[ ],[ ],[ ] #定义XYZ三个空列表,分别对应三个轴
with open(filename, 'r') as f: #打开文档,类型是只读
lines=f.readlines() #按行读取数据
for i in lines:
value=[ float(s) for s in i.split(" ")] #将行数据以空格分开,并以浮点型赋给value
X.append(value[0]) #将value 的第一个数值 添加到 列表X
Y.append(value[1]) #将value 的第二个数值 添加到 列表Y
Z.append(value[2]) #将value 的第三个数值 添加到 列表Z
这次我们使用scatter绘图来看看
d.scatter3D(X,Y,Z,c=Z,s=5, cmap='Blues',alpha=0.5)
plt.show()
结果如下
可以看到我们生成了一只生动的蓝色兔子。能够实现这样丰富的图像变化源于scatter提供的各类参数。我们可以通过更改各类参数来实现我们需要的效果。
scatter的参数分别有XYZ的坐标,c表示代表点的颜色或颜色序列,默认蓝色。如果需要显示多种颜色,可以传入一个颜色的列表,在这我直接采用了Z的数据。s表示点的大小,默认为20。cmap设置颜色的参数,alpha为透明度。我们还有其他很多可以设置的参数,具体参考如下
今天的关于PLT库的整理就到此为止了,最后一块三维绘图的内容算是拓展,只是简单进行介绍,所以也没有细讲,有机会再补充更多的内容。
如有不足或纰漏欢迎批评指正。