本节导图:https://www.processon.com/view/link/5fde0dbfe0b34d66b824203b
面向对象接口使用起来比较复杂,matplotib提供了pyplot模块来实现快速绘图,它的API非常类似于MATLAB,它将复杂的对象关系隐藏起来,方便我们快速使用。
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']#显示中文字体标签
plt.rcParams['axes.unicode_minus']=False
x = np.linspace(0, 10, 1000)
y = np.sin(x)
z = np.cos(x**2)
plt.figure(figsize= (12, 4))#设置图像高宽比
plt.plot(x, y, label= "$sin(x)$",color = "red", linewidth= 2)#线属性
plt.plot(x, z, label = "$cos(x^2)$", color = "blue")
plt.xlabel("横轴")#图属性:横纵坐标,标题横纵坐标显示属性
plt.ylabel("纵轴")
plt.title("demo")
plt.ylim(-1.5, 1.5)#纵坐标范围
plt.xlim(0, 11)
plt.legend(loc ="upper right")
plt.show()
matplotib内部全部使用面向对象实现,组成图标的各个元素都是对象。
虽然可以通过pyplot快速绘图,但是在编写大型应用程序时,通过面向对象的方式调用将更加有效;
另外,如果理解了matplotb内的对象含义及其关系,这将更有助于我们更好的用好pyplot。
类关系
Axes内部可以细分,下面是一个具体的直线图中,我们看到还有如下对象:
Axis就是前一个图上的Axis;Title为标题,你可以为你的图起一个标题;Label为坐标轴标签;Tick为刻度线:Tick Label为刻度注释;中间是Line;
完整对象树参考下图:
绘图流程
1.创建Fiqure对象;
2.为Fiqure对象创建一个或多个Axes对象;
3,调用Axes对象的方法,创建一些Axis ,Title ,Line2D等简单类型组件,并设置其相关属性;(无需自己去手动创建这些简单组件对象)
4,通过Figure对象展示图像;
import matplotlib.pyplot as plt
import numpy as np
#准备数据
xs = np.arange(1,50)
ys = xs ** 2
zs = np.cos(xs)
figure = plt.figure() #通过plt.figure(),生成rigure对象
#创建第一个axes(左上角)
axesl = figure.add_subplot(2,2,1) #调用figure.add subplot((),创建第一个axes对象;
#声明2*2布局,选第1块
axesl.set_xlabel('x') #设置xaxis对象的 label
axes1.set_ylabel('y') #设置yaxis对象的1abel
axesl.set title('plot1') #设置axes对象的title
axesl.plot(xs,ys) #通过plot方法,声明data,创建Line2D对象
#创建第二个axes(右下角)
axes2 = figure.add_subplot(2,2,4)*沿用2*2布局,选第4块
axes2.set xlabel('x')
axes2.set ylabel('z')
axes2.set_title('plot2')
axes2.plot(xs,zs)
figure.show()
当你仅需要一张子图时,全部基于plt的方法调用,已经帮你隐藏了axes对象的创建;
类似上面一般流程的例子中,axes对象也在尝试帮我们隐藏axis ,label等对象的创建,简化我们的使用;
散点图
import numpy as np
import matplot1ib.pyplot as plt
# 定义50个点
N = 50
x = np.random.rand(N) #随机产生x坐标
y = np.random.rand(N) #随机产生y坐标
area = np.pi*(15*np.random.rand(N))**2 #随机产生面积
colors = np.random.rand(N) #随机产生顾色(matplotlib可以自动将0-1的浮点数转为颜色)
plt.scatter(x,y,a = area, colors,alpha = 0.5) #声明每个点的:xy坐标、面积、颜色,以及透明度为0.5
plt.show()
条形图
import matplotlib.pyplot as plt
import numpy as np
xs = np.arange(0, 10)
ys = np.random.randint(100, 200, 10)
plt.bar(xs, ys) #绘制条形图
plt.xticks(xsm ['x_{}'.format(x+1) for x in xs]) #设置xtick
plt.show()
饼图
import matplotlib.pyplot as plt
labels = ['apple', 'orange', 'pear', 'peach'] #四个label
sizes = [15, 20, 17, 35] #四个size
explode = [0, 0.1, 0, 0] #四个偏移量
fig1, ax1 = plt.subplots() #通过无参的subplots方法,同时获得figure对象和axes对象
ax1.pie(sizes, explode = explode ,labels = labels, autopct = '%1.1f%%',
shadow = True, startangle = 90) #绘制饼图 autopct:自动根据数值进行百分比运算
plt.show()
matplotib官方提供了一个gallery页面,展示了各种缩略图及对应代码,在画图前,可以快速浏览、从里面找到想要的图,然后点击进入代码界面,然后复制修改样例代码即可,非常方便。
基于Matplotib核心库进行了更高阶的API封装,可以让你轻松地画出更漂亮的统计图形。Seaborn的漂亮主要体现在配色更加舒服、图形元素的样式更加细腻。
我们可以通过使用seaborn,仅加入一行(不包括import),使上述的柱状图更好看:
如修改上面的条形统计图样例:
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sbn
sbn.set(style = 'darkgrid', palette = 'deep') #设置style为暗色分块, 调色板(palette)为深暗色
xs = np.arange(0, 10)
ys = np.random.randint(100, 200, 10)
plt.bar(xs, ys) #绘制条形图
plt.xticks(xsm ['x_{}'.format(x+1) for x in xs]) #设置xtick
plt.show()
seaborn主要提供了好看的统计图接口,它的接口十分清晰,主要的四种统计接口,
1,可视化统计关系:使用散点图、直线图,对数据进行关联性分析;
2,可视化数据分布:使用直方图、累积分布图、核密度图、多变量分布图,来展示数据分布;
3,用分类数据绘图:使用分类散点图、分类分布图、分类估计图,来展示离散的类别数据;
4,可视化回归模型:在上述可视化的基础上,做一些简单的回归拟合;
更详细的参考下面链接:http://seaborn.pydata.org/tutorial.html