一、Why’s Matplotlib
Matplotlib:风格类似于Matlab,是基于Python的绘图库,属于Python中最基础的画图工具。他提供了一整套与matlab相似的命令API,十分适合交互式绘图。
除了Matplotlib外,还有几个较常用的绘图库:
Seaborn
Seaborn是基于Matplotlib的高级可视化效果库,偏向于统计作图,可用于数据挖掘和机器学习中的变量特征选取。相对Matplotlib,其语法相对简单,但绘图方式较为局限。
Bokeh
Bokeh是基于JavaScript来实现交互可视化的,可以在WEB浏览器中实现美观的视觉效果。缺点在于:版本时常更新但有时不向下兼容、语法晦涩等。
ggplot
ggplot是基于R语言的ggplot2制作的python版本库,但目前Yhat已停止对该库的维护。
Plotly
Plotly支持Python和R,优点在于可提供WEB在线交互,配色也好看。
Mapbox
Mapbox是处理地理数据引擎更强的可视化工具库。
二、What’s Matplotlib
pyplot是matplotlib的一个子模块,主要为底层的面向对象的绘图库提供状态机界面。状态机隐式地自动创建数字和做标轴以实现所需的绘图。
matplotlib中所有内容都按照层次结果进行组织,顶层就是由pyplot提供的matplotlib“状态机环境”。基于这个状态机环境,我们可以创建图形。
接下来介绍matplotlib中几个重要的要素:Figure、Axes、Axis
通过程序来看结果:
1、生成空画板
fig=plt.figure()
fig.suptitle('No axes on thie figure')
>>>
Text(0.5,0.98,'No axes on thie figure')
<Figure size 432x288 with 0 Axes>
2、贴上画纸
fig.ax_lst=plt.subplots(2,2)
plt.show()
plt.plot(x,y,format_string) 中参数
x轴数据,y轴数据,format_string控制曲线的格式(颜色、风格以及标记)
颜色字符color
风格字符linestyle
标记字符marker
除此之外还有:
markerfacecolor 标记颜色
markersize 标记大小
#绘出四个点,并用星状表示虚线连接
plt.plot([1,2,3,6],[4,5,8,1],':*',markersize=10,color = '#ff0000')
plt.show()
plt.title("first graph") //图像标题
plt.legend(loc=n) //图像图例,n=1、2、3、4不同位置
plt.ylabel(‘y轴标签’) //y轴标签
plt.axis([-1,10,0,6]) //x轴范围[-1,10],y轴[0,6]
plt.savefig(‘test’,dpi=600) //图像保存,默认为png格式
plt.show() //显示图像
三、How to use Matplotlib
全局设置:
import numpy as np
from matplotlib import pyplot as plt#导入pyplot绘图工具
%matplotlib inline #在Jupyter notebook中由于每个人的环境有差异,有些必须执行plt.show()才能将图片显示出来,加上这行就不用show()也能显示了
接下来展示条形图(plot)、散点图(scatter)、柱状图(bar)、直方图(hist)、箱型图(boxplot)以及扇形图(pie)等用法。
条形图plot:反映数据随时间变化走势(一个变量随另一个变量变化的走势)
x = np.arange(9)
y = np.sin(x)
z = np.cos(x)
# marker数据点样式,linewidth线宽,linestyle线型样式,color颜色
plt.plot(x, y, marker="*", linewidth=3, linestyle="--", color="orange",markersize='10')
plt.plot(x, z)
plt.title("matplotlib")
plt.xlabel("height")
plt.ylabel("width")
# 设置图例
plt.legend(["Y","Z"], loc="upper right")
plt.grid(True)
plt.show()
散点图scatter:反映两个变量间相关关系
#散点图
x=np.arange(1,20)
y=np.random.randn(19)
plt.scatter(x,y,label='x',color='k',s=25,marker='o')
柱状图bar:比较数值大小(区别直方图)
#柱状图
x = np.arange(10) #x为x轴上刻度,代表y中第几个数字
y = np.random.randint(0,30,10)
plt.bar(x,y,label='柱状图1')
plt.legend(loc=1)
matlibplot.pyplot 画图 axes.bar() x轴默认排序解决方法:
https://blog.csdn.net/qq_35318838/article/details/80198307
直方图hist:查看数据频数分布
#直方图
ages=np.random.randint(0,100,30) #ages表示生成30个0-100间整数
bins=np.arange(0,100,10) #bins表示x轴刻度由0-100分为五份
plt.hist(ages,bins,rwidth=0.8)
#箱型图
spread = np.random.rand(50) * 100
center = np.ones(25) * 50
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
data = np.concatenate((spread, center, flier_high, flier_low))
plt.boxplot(data)
plt.title('Basic Plot')
#扇形图
players=[10,20,3,90]
types=['wow','wars','cs','lol']
plt.figure(figsize=(10,10))
plt.pie(players,#数值
labels=types,#标签
shadow=True,#阴影
autopct='%1.2f%%',#百分比显示
explode=(0.2,0,0,0),#突出显示第一个
startangle=90,#旋转角度
textprops={'fontsize':20})#字体属性,这里设大小为20
#子图
plt.figure(figsize=(8,6),dpi=100) #设定画板的宽度高度,单位为英寸,dpi绘图对象的分辨率,即每英寸多少个像素,默认80
#subplot(numRows,numCols,plotnum)
plt.subplot(2,2,2) #两行两列第二个位置
plt.plot([0,1],[0,1],color='r')
plt.title('A')
plt.subplot(2,2,1) #两行两列第一个位置
plt.plot([0,1],[0,1],color='b')
plt.title('B')
plt.subplot(2,1,2) #两行一列中第二个位置
plt.scatter(range(1,10,1),np.random.rand(9),color='orange')
plt.title('C')
参考:
matplotlib绘制各类图形
Matplotlib系列—pyplot的plot( )函数
Matplotlib常用绘图示例
如何选择合适的图表:https://jingyan.baidu.com/article/37bce2be58288a1003f3a242.html