python画画用哪库好_机器学习:Python常用库——Matplotlib库

说起数据分析,你的眼前有没有浮现出直方图、散点图、曲线图…各种图表?

Python作为一门编程语言,如何能作图呢?

办法当然是有的,而且我们已经接触过了。在上一章节中画散点图的时候就导入过,它就是Matplotlib。

Matplotlib是Python的绘图库,具有丰富的绘图功能,是数据可视化的好帮手!

下面就看看如何用Matplotlib画图。

一、基本设置

打开Jupyter Noteboook,输入下列代码:

import matplotlib.pyplot as plt

#让图像在Jupyter Notebook中显示

%matplotlib inline

#显示的图片格式,此处为mac中的高清格式,也可以设置为“bmp”等格式

%config InlineBackend.figure_format = "retina"

#设置字体为中文,这里调用Windows系统的字体文件

from matplotlib.font_manager import FontProperties

fonts = FontProperties(fname = r"C:\windows\fonts\simsun.ttc", size=14)

上面的代码中有3个重要部分:

1.为了在Jupyter Noteboook中显示图像,需要使用%matplotlib inline命令;

2.图片格式选择,高清的图片更清晰;

3.Matplotlib库默认是不支持中文文本在图像中显示的,为了解决这个问题,需要提前定义中文字体,其中fname参数指定字体文件的位置,size参数指定字体的大小。

关键的基本设置就这3项,接下来就可以画图了。

二、画图

先画个正弦曲线,内容如下:

import matplotlib.pyplot as plt

#让图像在Jupyter Notebook中显示

%matplotlib inline

#显示的图片格式,此处为mac中的高清格式,也可以设置为“bmp”等格式

%config InlineBackend.figure_format = "retina"

#设置字体为中文,这里调用Windows系统的字体文件

from matplotlib.font_manager import FontProperties

fonts = FontProperties(fname = r"C:\windows\fonts\simsun.ttc", size=14)

import numpy as np

X = np.linspace(1,15)

Y = np.sin(X)

plt.figure(figsize=(6,4))

plt.plot(X, Y, "r-o") #表示绘制红色、圆圈

plt.xlabel("X")

plt.ylabel("Y")

plt.title("y=sin(x)")

plt.grid("on")

plt.show()

上面的代码中,plt.figure()定义了一个指定大小的图像窗口,plt.plot()绘制对应坐标为X、Y的连线图,第三个参数"r-o"表示绘制红色曲线点图,plt.xlabel()定义X轴名称,plt.ylabel()定义Y轴名称,plt.title()定义图像名称,plt.grid("on")表示打开背景网格,最后使用plt.show()就能查看图像。

运行后,可以看到下图所示的曲线图:

那有时候我们的相似图表需要放在一起比较怎么办呢?

很简单,把它们绘制在一个图中就可以,plt.subplot()方法支持绘制多个图像窗口。输入下列代码:

import matplotlib.pyplot as plt

#让图像在Jupyter Notebook中显示

%matplotlib inline

#显示的图片格式,此处为mac中的高清格式,也可以设置为“bmp”等格式

%config InlineBackend.figure_format = "retina"

#设置字体为中文,这里调用Windows系统的字体文件

from matplotlib.font_manager import FontProperties

fonts = FontProperties(fname = r"C:\windows\fonts\simsun.ttc", size=14)

import numpy as np

X = np.linspace(1,15)

Y = np.sin(X)

xtick = [0,5,10,15]

xticklabel = [str(x)+"在这"for x in xtick]

plt.figure(figsize=(10,8))

plt.subplot(2,2,1)

plt.plot(X, Y, "b-.s") #表示绘制蓝色、虚线、矩形点

plt.xlabel(r"$\alpha$") #使用LaTeX公式

plt.ylabel(r"$\beta$")

plt.title("$y = \sum sin(x)$")

plt.subplot(2,2,2)

plt.hist(Y, 20) #直方图

plt.text(0,7,"直方图",fontproperties = fonts)

plt.xlabel("频数",fontproperties = fonts)

plt.ylabel("取值",fontproperties = fonts)

plt.title("直方图",fontproperties = fonts)

plt.subplot(2,1,2)

plt.step(X,Y,c="R",label="sin(x)",linewidth=3)

plt.ylabel("Y",fontproperties = fonts)

plt.title("Bar",fontproperties = fonts)

plt.legend(loc="lower right",fontsize=16) #图例在右下角

plt.xticks(xtick,xticklabel,rotation=45,fontproperties=fonts) #x坐标取值,45度倾斜

plt.subplots_adjust(hspace=0.35) #调整图像之间的水平空间距离

plt.show()

在这个例子中,分别绘制了线图、直方图和阶梯图3个子图,采用的还是不规则划分。

plt.subplot(2,2,1)表示将当前图窗分成2*2=4个区域,并在第一个区域上进行绘图;plt.subplot(2,2,2)表示在第二个区域上绘制图像;

第三个图比较特殊,占用了(2,2,3)和(2,2,4),需要对其重新划分。按照2*1划分后,前两个图占用了(2,1,1)的位置,因此第三个图占用(2,1,2)的位置。

可以看出,在Matplotlib下,一个Figure对象可以包含多个子图(Axes),可以使用plt.subplot()快速绘制,按照从左到右、从上到下的顺序对每个子图区域进行编号。

新出现的直方图函数plt.hist(Y, 20)表示将数据Y分成20份来绘制直方图,plt.text(0,7,"直方图",fontproperties = fonts)表示在坐标为(0,7)的位置添加文本标签。

函数plt.step(X,Y,c="R",label="sin(x)",linewidth=3)为绘制阶梯图,并且指定线的颜色和宽度,plt.legend(loc="lower right",fontsize=16)为添加图例,并且位置在右下角。

运行程序后可看到:

除了二维图像,Matplotlib也可以绘制三维图像。输入下列代码:

import matplotlib.pyplot as plt

#让图像在Jupyter Notebook中显示

%matplotlib inline

#显示的图片格式,此处为mac中的高清格式,也可以设置为“bmp”等格式

%config InlineBackend.figure_format = "retina"

#设置字体为中文,这里调用Windows系统的字体文件

from matplotlib.font_manager import FontProperties

fonts = FontProperties(fname = r"C:\windows\fonts\simsun.ttc", size=14)

import numpy as np

from mpl_toolkits.mplot3d import Axes3D

x = np.linspace(-4, 4, num=50)

y = np.linspace(-4, 4, num=50)

X,Y = np.meshgrid(x,y)

Z = np.sin(np.sqrt(X**2 + Y**2))

fig = plt.figure(figsize=(12,5))

ax1 = fig.add_subplot(121, projection='3d') #第一个子图

ax1.plot_surface(X, Y, Z, rstride=1, cstride=1, alpha=0.5, cmap=plt.cm.coolwarm) #绘制曲面图

cset = ax1.contour(X, Y, Z, zdir="z", offset=1, cmap=plt.cm.CMRmap) #绘制等高线

ax1.set_xlabel("X")

ax1.set_xlim(-4,4) #设置绘图范围

ax1.set_ylabel("Y")

ax1.set_ylim(-4,4)

ax1.set_zlabel("Z")

ax1.set_zlim(-1,1)

ax1.set_title("surface and contour")

theta = np.linspace(-4*np.pi, 4*np.pi, 100) #第二个子图

z = np.linspace(-2, 2, 100)

r = z**2 +1

x = r*np.sin(theta)

y = r*np.cos(theta)

ax2 = plt.subplot(122, projection="3d")

ax2.plot(x,y,z) #绘制曲线

ax2.scatter3D(x,y,z,c="r") #绘制红色三维散点

ax2.view_init(elev=20, azim=25) #设置轴的方位角和高程

ax2.set_title("Curve and scatter")

plt.show

程序中,X,Y = np.meshgrid(x,y)是生成网格数据点,ax1用fig.add_subplot(121, projection='3d')指定第一个子图绘制,ax1.plot_surface()是绘制三维曲面图,ax1.contour() 指定绘制等高线图,并且制定投影在Z轴方向,位置在Z=1的平面;

ax2.scatter3D(x,y,z,c="r")表示绘制三维散点图,ax2.view_init()为设置查看图像的视角。

运行后结果如图所示

除了画图,Matplotlib还可以使用imshow()方法来显示图像,这里就不举例了,感兴趣的小伙伴可以移步官方文档。

关于Matplotlib库就说这么多,作为数据分析工具功能确实非常强大。下一次我们将介绍一个强大的统计分析库——Statsmodels库。

你确定不关注我一波?!

你可能感兴趣的:(python画画用哪库好)