Matplotlib

  • 基本属性
  • 配置参数:
  • 线条风格linestyle或ls
  • 线条标记
  • 颜色
  • 背景色
  • 应用 (iris为例)
  • Matolotlib 数据可视化
  • 三维图形简介



基本属性

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()