目录

简介

组成元素

plot()--展现变量的变化趋势

设置坐标轴样式(label,ticks,lim等的设置)

plt.grid()--设置网格

绘制参考线与参考域(axvline()与axspan()函数)

plt.text()--标记坐标点

plt.legend()--绘制图例

plt.title()--设置标题

plt.annotate()--添加图形内容细节的指向型注释文本

plt.savefig()与plt.show()--保存与显示图像

plt.clf()与plt.pause()--动态绘制

完整代码


写这篇文章时已经学matplotlib2个多月了,期间遇到好多困难,因此决定写下这篇文章帮助那些初学matplotlib的人。入门一和二对于平常使用python统计数据已经够用了,不过如果想要进一步深入理解,可以看下入门三。

简介

matplotlib是python的一个库,内部储存了大量的函数用于绘制图像,通常会与pandas和numpy库一起使用,平常我们通常只是用里面的pyplot模块。通过pip3 install matplotlib即可下载。

首先先引入库

import matplotlib.pyplot as plt
import numpy as np

#下面两条语句根据电脑系统,选取一条,引入中文字体,防止绘图时输入中文无法出现字体
plt.rcParams["font.sans-serif"]=["Heiti TC"]#mac系统
plt.rcParams["font.sans-serif"]=["SimHei"]#windows系统

plt.rcParams["axes.unicode_minus"]=False#使坐标轴上的负坐标能正常出现

plt.figure(figsize=(6,6))#创建6*6大小的窗口

组成元素

plot()--展现变量的变化趋势

x=np.linspace(start,end,num,endpoint)
y=np.sin(x)
plt.plot(x,y,ls="-",lw=2,label="y=sin(x)",c="c",alpha=0.9)

首先介绍一下numpy里的linspace(),这里的参数start,end,num,endpoint表示若endpoint=True(默认为True)在区间[start,end]均匀选取num个数据;反之,若endpoint为False,则区间变为[start,end)。

plt.plot()内的参数

x:x坐标

y:y坐标

ls:也可写成linestyle,表示函数的表示形式常见的有":" 、"-." 、"-" 、"--"、""

lw:也可写成linewidth,表示的是线条的宽度

label:直线的图例,通常需要在使用plt.plot()后使用plt.legend()使图例加载出来

c:为color的的省写,表示颜色

marker:坐标点的形状常见的有"o"、"*"

alpha:控制颜色透明度0~1

而当ls="",marker="o"时为散点图

数据够多就能化直为曲

设置坐标轴样式(label,ticks,lim等的设置)

plt.xlabel("x-axis",rotation)
plt.ylabel("y-axis",rotation)
plt.xticks(list1,list2,rotation=45,fontsize=12)
plt.yticks(fontsize=12)
plt.xlim(0,np.pi*2)
plt.ylim(-1.5,1.5)

若无list1 和list2


 plt.xlabel(),和plt.ylabel(),均为为x与y轴添加轴标题

表示为plt.xlabel(text,rotation)和plt.ylabel(text,rotation)

text:标签内容

rotation:xlabel默认为0,ylabel默认为90,可不填

plt.xticks()和plt.yticks()中:

rotation:用于设置参数的旋转,可不使用

fontsize:设置坐标轴刻度上字体大小,可不使用

list1:刻度上只显示list1中的值,可不使用

list2:将list1中的值化为list2,可不使用,但使用list2必须使用list1否则,坐标轴可能找不到这些数据例如中文...

plt.xlim(a,b)与plt.ylim(a,b)用于设置x轴y轴显示范围在a到b

#r"$内容$"可以将一些符号用印刷体打出,如若要打出𝜋,一般情况下会出现方框,但用这条语句,可以顺利打印出来

如下方示例代码

plt.xlabel("x-axis")
plt.ylabel("y-axis")
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r"-$\pi$",r"$-\pi/2$",0,r"$\pi/2$",r"$\pi$"],fontsize=10)
plt.yticks(fontsize=12)
plt.xlim(0,np.pi*2)
plt.ylim(-1.5,1.5)

 

plt.grid()--设置网格

plt.grid(axis="y",ls=":",lw=2,c="c",alpha=0.8)

 axis:表示只表示y轴,如果不填该参数,默认x,y轴都显示

ls:也可写成linestyle,表示函数的表示形式常见的有":" "-." "-" "--"

lw:也可写成linewidth,表示的是线条的宽度

c:为color的的省写,表示颜色

alpha:控制颜色透明度0~1

关于网格线密度,可以考虑通过设置坐标轴刻度的宽度来改变

如下方代码,通过改变ticks中坐标数据的间隔(下方代码间距0.1),就可以达到调整网格间距

plt.grid()
plt.xticks(np.arange(-1,1,0.1),rotation=45)
plt.yticks(np.arange(-1,1,0.1))

绘制参考线与参考域(axvline()与axspan()函数)

plt.axvline(x=np.pi,c="black",ls="-",lw=2)
plt.axhline(y=0.0,c="black",lw=2,ls="-")

plt.axvline():表示绘制一条垂直(vertical)于x轴的宽度为2的连续黑直线也就是x=𝜋(代码中).

plt.axhline():表示绘制一条垂直(horizon)于x轴的宽度为2的连续黑直线也就是y=0(代码中).

plt.axvspan(xmin=np.pi/2,xmax=np.pi/2*3,facecolor="gray",alpha=0.4)
plt.axhspan(ymin=-1,ymax=1,facecolor="rosybrown",alpha=0.4)

同理,axspan()表示绘制垂直于x轴的带状领域,axspan()表示绘制垂直于y轴的领域。

facecolor:为领域颜色,可简写为fc

alpha:控制颜色透明度0~1

plt.text()--标记坐标点

#标记少量数据
plt.text(x,y,string,c,alpha,fontsize)

#标记大量数据(通常用作标记柱状图数据)
for a,b in zip(x,y):
    plt.text(a,b,b,c,alpha,fontsize,ha,va)

string为显示的内容如图中就为

plt.text(np.pi,0,"(pi,0)",c="black",alpha=0.7,fontsize=12)

在第二组代码中,xy为数据坐标,ha:为水平位置,一般设置为"center"比较美观,va:为垂直数据,一般显示为:":bottom"(最好在plt.bar()(绘制柱状图)后使用)

plt.legend()--绘制图例

plt.legend()当你发现其它函数的label填写后却没有显示图例,往往是漏了legend()函数

其内有一个参数控制图例位置

以下参数均可不使用

plt.legend(loc,edgecolor,frameon,facecolor)

loc:图例位置由俩部分组成upper或lower和left或right组合而成如:"upper right"

edgecolor:设置图例边框颜色

frameon:设置图例是否有边框,默认True

facecolor:图例背景颜色

plt.title()--设置标题

plt.title(string)

产生string标题

plt.annotate()--添加图形内容细节的指向型注释文本

plt.annotate("maximum",
            xy=(np.pi/2,1),
            xytext=(np.pi/2-1.4,1.1),
            color="dodgerblue",
            alpha=0.7,
            weight="bold",
            fontsize=12,
            arrowprops=dict(arrowstyle="->",connectionstyle="arc3",color="b"))

 xy:箭头指向的坐标点

xytext:文本内容出现的位置

weight:注释文本字体粗细风格

arrowprops:指示被注释内容箭头的字典

plt.savefig()与plt.show()--保存与显示图像

plt.savefig(path)

plt.show()显示图像

plt.clf()与plt.pause()--动态绘制

动态绘制的过程主要包括创建一个幕布,你在上面绘图,停顿几秒留作观看,清空幕布,重新绘图,而这,也就导致了图像的动态产生

plt.clf():清空图像

plt.pause(t):停顿t秒时间

以机器学习中的梯度下降(主要通过导数值来判断,由代价函数e是一个关于w的二次函数可得,dw>0,我们将w调小一点,dw<0我们将w调大一点)为例

import numpy as np
from matplotlib import pyplot as plt

#数据集
xs = np.random.rand(counts)
xs = np.sort(xs)
ys = np.array([1.2*x+np.random.rand()/10 for x in xs])

#权重与学习率
w=0.1
alpha=0.01

for _ in range(1000):
	for i in range(100):
        #梯度下降与前向传播
		x=xs[i]
		y=ys[i]
		#e=xxww-2xyw+yy
		k=2*x*x*w-2*x*y
		w=w-k*alpha

        #绘图
		if i%50==0:
			plt.clf()
			plt.plot(xs,ys,'o',xs,xs*w,'-')
			plt.xlim(-0.1,1.3)
			plt.ylim(-0.1,1.3)
			plt.pause(0.1)


plt.show()

完整代码

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams["font.sans-serif"]=["Heiti TC"]
plt.rcParams["axes.unicode_minus"]=False

x=np.linspace(-np.pi,np.pi,1000)
y=np.sin(x)
plt.plot(x,y,linestyle="-",lw=2,label="y=sin(x)",alpha=0.2)
plt.xlabel("x-axis")
plt.ylabel("y-axis")
plt.xticks(rotation=45,fontsize=12)
plt.yticks(fontsize=12)
plt.xlim(-np.pi*2,np.pi*2)
plt.ylim(-1.5,1.5)
plt.grid(axis="y",ls=":",lw=2,c="c",alpha=0.7)
plt.axvline(x=0.0,c="black",ls="-",lw=2)
plt.axhline(y=0.0,c="black",lw=2,ls="-")
plt.axvspan(xmin=-9,xmax=9,fc="gray",alpha=0.4)
#plt.axhspan(ymin=-1,ymax=1,fc="rosybrown",alpha=0.4)
plt.text(0,0,"(0,0)",c="black",alpha=0.7,fontsize=12)
plt.legend(loc="upper right",edgecolor="black",frameon=True,facecolor="gray")
plt.fill_between(x,y,0,facecolor="gray",alpha=0.4)
plt.annotate("maximum",xy=(np.pi/2,1),xytext=(np.pi/2-1.4,1.1),color="dodgerblue",alpha=0.7,weight="bold",fontsize=12,arrowprops=dict(arrowstyle="->",connectionstyle="arc3",color="b"))
plt.savefig(path)
plt.show()

 萌新第一篇文章给个赞呗👍

入门级(二)通道

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐