基本属性
Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,MATLAB是数据绘图领域广泛使用的语言和工具。MATLAB语言是面向过程的。利用函数的调用,MATLAB中可以轻松的利用一行命令来绘制直线,然后再用一系列的函数调整结果。matplotlib有一套完全仿照MATLAB的函数形式的绘图接口,在matplotlib.pyplot模块中。这套函数接口方便MATLAB用户过度到matplotlib包
配置参数:
axex: 设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的显示
figure: 控制dpi、边界颜色、图形大小、和子区( subplot)设置
font: 字体集(font family)、字体大小和样式设置
grid: 设置网格颜色和线性
legend: 设置图例和其中的文本的显示
line: 设置线条(颜色、线型、宽度等)和标记
patch: 是填充2D空间的图形对象,如多边形和圆。控制线宽、颜色和抗锯齿设置等。
savefig: 可以对保存的图形进行单独设置。例如,设置渲染的文件的背景为白色。
verbose: 设置matplotlib在执行期间信息输出,如silent、helpful、debug和debug-annoying。
xticks和yticks: 为x,y轴的主刻度和次刻度设置颜色、大小、方向,以及标签大小。
线条风格linestyle或ls
‘-‘ 实线
‘:’ 虚线
‘–’ 破折线
‘None’,’ ‘,’’ 什么都不画
‘-.’ 点划线
线条标记
标记maker 描述
‘o’ 圆圈
‘.’ 点
‘D’ 菱形
‘s’ 正方形
‘h’ 六边形1
‘*’ 星号
‘H’ 六边形2
‘d’ 小菱形
‘_’ 水平线
‘v’ 一角朝下的三角形
‘8’ 八边形
‘<’ 一角朝左的三角形
‘p’ 五边形
‘>’ 一角朝右的三角形
‘,’ 像素
‘^’ 一角朝上的三角形
‘+’ 加号
‘\ ‘ 竖线
‘None’,’’,’ ‘ 无
‘x’ X
颜色
别名 颜色
b 蓝色
g 绿色
r 红色
y 黄色
c 青色
k 黑色
m 洋红色
w 白色
背景色
通过向如matplotlib.pyplot.axes()或者matplotlib.pyplot.subplot()这样的方法提供一个axisbg参数,可以指定坐标这的背景色。
subplot(111,axisbg=(0.1843,0.3098,0.3098)
示例
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
#绘制直线图plt.plot()横坐标轴是特征 纵坐标为对应的值 散点图plt.scatter() 横纵两个都是特征
x=np.linspace(0,10,50)
y=np.sin(x)
cosy=np.cos(x)
plt.plot(x,y,label="sin(x)")
plt.plot(x,cosy,color='black',linestyle='--',label="cos(x)")
plt.xlim(-5,15)#调节x,y
plt.ylim(0,1.5)
plt.axis([-1,11,-2,2])#同时
plt.xlabel("x axis")
plt.ylabel("y value")
plt.legend()#图例cos sin
plt.title("welcom to pandas learning")
plt.show()
x=np.random.normal(0,1,100)
y=np.random.normal(0,1,100)
plt.scatter(x,y,alpha=0.5)
plt.show()
应用 (iris为例)
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from sklearn import datasets
iris=datasets.load_iris()
print(iris.DESCR)
print(iris.data.shape)
print(iris.feature_names)
print(iris.target.shape)
print(iris.target_names)
X=iris.data[:,:2]
print(X.shape)
plt.scatter(X[:,0],X[:,1])
plt.show()
y=iris.target
plt.scatter(X[y==0,0],X[y==0,1],color='red',alpha=0.5,marker='o')
plt.scatter(X[y==1,0],X[y==1,1],color='b',marker='*')
plt.scatter(X[y==2,0],X[y==2,1],color='green',marker='+')
plt.show()
X=iris.data[:,2:]
print(X.shape)
plt.scatter(X[:,0],X[:,1])
plt.show()
y=iris.target
plt.scatter(X[y==0,0],X[y==0,1],color='red',alpha=0.5,marker='o')
plt.scatter(X[y==1,0],X[y==1,1],color='b',marker='*')
plt.scatter(X[y==2,0],X[y==2,1],color='green',marker='+')
plt.show()
Matolotlib 数据可视化
代码如下(示例):
import matplotlib.pyplot as plt
import numpy as np
x=[1,2,3,4]
y=[1,4,9,16]
plt.plot(x,y)
plt.ylabel("squares")
plt.show()
#设置样式
plt.style.available[:5]
plt.show()
with plt.style.context("seaborn-whitegrid"):
plt.plot(x,y)
#将图像保存为文件
x=np.linspace(0,10,100)
plt.plot(x,np.exp(x))
plt.savefig("my_figure.png")
plt.show()
#Matplotlib库
#折线图
x=np.linspace(0,2*np.pi,100)
print(plt.plot(x,np.sin(x)))
plt.show()
#绘制多条曲线
plt.plot(x,np.sin(x))
plt.plot(x,np.cos(x))
plt.show()
#调整线条颜色和风格
offsets=np.linspace(0,np.pi,5)#开始 结束 样本数
colors=["blue","g","r","yellow","pink"]
for offset,color in zip(offsets,colors):
plt.plot(x,np.sin(x-offset),color=color)
plt.show()
#风格
x=np.linspace(0,10,11)
offsets=list(range(8))
linestyles=["solid","dashed","dashdot","dotted","-","--","-",":"]
for offset,linestyle in zip(offsets,linestyles):
plt.plot(x,x+offset,linestyle=linestyle)
#调整线宽
x=np.linspace(0,10,11)
offsets=list(range(0,12,3))
linewidths=(i*2 for i in range(1,5))
for offset,linewidth in zip(offsets,linewidths):
plt.plot(x,x+offset,linewidth=linewidth)
plt.show()
#设置数据点标记
x=np.linspace(0,10,11)
offsets=list(range(0,12,2))
markers=["*","+","o","s","s","+"]
for offset,marker in zip(offsets,markers):
plt.plot(x,x+offset,marker=marker,ms=15)#ms 标签大小
plt.show()
x=np.linspace(0,10,11)
offsets=list(range(0,8,2))
color_marker_linestyles=["g*+","b+-","ko-","rs:"]
for offset,color_marker_linestyle in zip(offsets,color_marker_linestyles):
plt.plot(x,x+offset,color_marker_linestyles)#颜色数据点线性
plt.show()
#调整坐标轴
x=np.linspace(0,2*np.pi,100)
plt.plot(x,np.sin(x))
plt.xlim(-1,7)
plt.ylim(-1.5,1.5)
plt.axis([-2,8,-2,2])#x,y同时设置
plt.axis("tight")#紧
plt.axis("equal")#缓
plt.show()
#对数坐标 坐标轴刻度样式调整
x=np.linspace(0,10,100)
plt.plot(x,x**2)
plt.xticks(np.arange(0,12,step=2))
plt.show()
#图例
x=np.linspace(0,2*np.pi,100)
plt.plot(x,np.sin(x),"b-",label="Sin")
plt.plot(x,np.cos(x),"r-",label="Cos")
plt.ylim(-1.5,2)
plt.title("SJHS")
plt.xlabel("x",fontsize=15)
plt.ylabel("sin(x)",fontsize=15)
plt.legend(loc="upper center",frameon=True,fontsize=15)
plt.text(3.5,0.5,"y=sin(x)",fontsize=15)#添加文字
plt.annotate('local min',xy=(1.5*np.pi,-1),xytext=(4.5,0),arrowprops=dict(facecolor='black',shrink=0.1),)#添加箭头
plt.show()
import matplotlib.pyplot as plt
import numpy as np
#散点图
x=np.linspace(0,10,50)
y=x**2
plt.scatter(x,y,c=y,cmap="inferno")#c=y 颜色映射
plt.colorbar()
plt.show()
#根据数据控制点大小-映射 透明度
x,y,colors,size=(np.random.rand(100) for i in range(4))
plt.figure(figsize=(12,6))#设置画布大小
plt.scatter(x,y,c=colors,s=1000*size,cmap="viridis",alpha=0.3)
plt.colorbar()
plt.show()
#柱形图
x=np.arange(1,6)
plt.bar(x,2*x,align="center",width=0.5,alpha=0.5,color=['yellow','green','red','pink','purple'],edgecolor='red')
plt.xticks(x,('G1','G2','G3','G4','G5'))
plt.tick_params(axis='both',labelsize=13)
plt.show()
#多子图
x=np.random.random(10)
y=np.random.random(10)
plt.subplots_adjust(hspace=0.5,wspace=0.3)#间隔
plt.subplot(321)
plt.scatter(x,y,s=80,c="b",marker=">")
plt.subplot(322)
plt.scatter(x,y,s=80,c="g",marker="*")
plt.subplot(323)
plt.scatter(x,y,s=80,c="r",marker="s")
plt.subplot(324)
plt.scatter(x,y,s=80,c="c",marker="p")
plt.subplot(325)
plt.scatter(x,y,s=80,c="m",marker="+")
plt.subplot(326)
plt.scatter(x,y,s=80,c="y",marker="H")
plt.show()
#直方图
#普通频次直方图
mu,sigma=100,15#均值100 标准差15
x=mu+sigma*np.random.randn(10000)
plt.hist(x,bins=50,facecolor='g',alpha=0.75)
plt.show()
#概率密度
mu,sigma=100,15#均值100 标准差15
x=mu+sigma*np.random.randn(10000)
plt.hist(x,bins=50,density=True,facecolor='r',alpha=0.75)
plt.show()
#累计概率分布
#模拟投两个骰子
class Die():
#模拟一个骰子的类
def __init__(self,num_sides=6):
self.num_sides=num_sides
def roll(self):
return np.random.randint(1,self.num_sides+1)
#重复投一个
die=Die()
results=[]
for i in range(60000):
result=die.roll()
results.append(result)
plt.hist(results,bins=6,range=(0.75,6.75),align="mid",rwidth=0.5)
plt.xlim(0,7)
plt.show()
#误差图yerr=d
x=np.linspace(0,10,50)
dy=0.5
y=np.sin(x)+dy*np.random.randn(50)
plt.errorbar(x,y,yerr=dy,fmt="+b")
plt.show()
#面向对象风格 普通图 画中画
三维图形简介
代码如下(示例):
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits import mplot3d
#三维数据点与线
ax=plt.axes(projection="3d")
zline=np.linspace(0,15,1000)
xline=np.sin(zline)
yline=np.cos(zline)
ax.plot3D(xline,yline,zline)#线
zdata=15*np.random.random(100)
xdata=np.sin(zdata)
ydata=np.cos(zdata)
ax.scatter3D(xdata,ydata,zdata,c=zdata,cmap="spring")
plt.show()
#三维数据曲面图
def f(x,y):
return np.sin(np.sqrt(x**2+y**2))
x=np.linspace(-6,6,30)
y=np.linspace(-6,6,30)
X,Y=np.meshgrid(x,y)
Z=f(X,Y)
ax=plt.axes(projection="3d")
ax.plot_surface(X,Y,Z,cmap="viridis")
plt.show()
#Seaborn库-文艺青年的最爱 基于matplotlib且数据与pandas统一的统计图制作库
#折线图对比
x=np.linspace(0,10,500)#开始,结束,样本
y=np.cumsum(np.random.randn(500,6),axis=0)#500行6列
with plt.style.context("classic"):
plt.plot(x,y)
plt.legend("ABCDEF",ncol=2,loc="upper left")#设置图例 名称列位置
plt.show()
#对比
import seaborn as sns
x=np.linspace(0,10,500)#开始,结束,样本
y=np.cumsum(np.random.randn(500,6),axis=0)
sns.set()#更加柔和
plt.plot(x, y)
plt.legend("ABCDEF", ncol=2, loc="upper left")
plt.show()
#柱形图对比
#matplotlib
x=['G1','G2','G3','G4','G5']
y=2*np.arange(1,6)
plt.figure(figsize=(8,4))
plt.barh(x,y,align="center",height=0.5,alpha=0.8,color="blue")
plt.tick_params(axis="both",labelsize=13)
plt.show()
#seaborn
x=['G5','G4','G3','G3','G1']
y=2*np.arange(5,0,-1)
sns.barplot(y,x,linewidth=5)
plt.show()
#以鸢尾花数据集为例
iris=sns.load_dataset("iris")
print(iris.head())
sns.pairplot(data=iris,hue="species")
plt.show()