一、前记

在这里需要注意一个点,在程序开始的时候使用并非直接的matplotlib,而是matplotlib.pyplot。

二、用法(plot线型图)

1、figure(窗口)
①figure代表的是一个窗口的意思,在一个figure()区域里面就可以建立一个窗口

#encodinfg:utf-8
from numpy import *
from pandas import *
from matplotlib.pyplot import *

x=linspace(-2,2,50)
y1=x**2
y2=2*x+1

figure()
plot(x,y1)

figure()
plot(x,y2)

figure()
plot(x,y1)
plot(x,y2)

show()

I7135-UBX0S6_759RT-M-ES
②除此之外,我们还可以将图像里面的线的形式进行一些改变
格式:plot(x,y,color='',linewidth=,linestyle='--')
③对窗口进行改变
figure(num=,figsize(8,5))
6@0W@T0PIUQ--T-9---WEQG
我们可以看到上图里面的左上角的数字名称改了,线加粗换了样式,坐标轴变成了的长宽之比变成了8:5

2、设置坐标轴
①坐标轴的文字修改
Ⅰ设置x轴的上下限:xlim((a,b))
Ⅱ设置y轴的上下限:ylim((a,b))
Ⅲ设置x轴的标签:xlabel('')
Ⅳ设置y轴的标签:ylabel('')
Ⅴ对x轴分段进行标签:xticks([a,b],['label1','label2'])
Ⅵ对y轴分段进行标签:yticks([a,b],['label1','label2'])
例:

#encodinfg:utf-8
from numpy import *
from pandas import *
from matplotlib.pyplot import *

x=linspace(-2,2,50)
y1=x**2
y2=2*x+1

figure(num=99,figsize=(8,5))
plot(x,y1,color='red',linewidth=2.5,linestyle='--')

xlim((-1,1))
ylim(((0,2)))
xlabel('this is x')
ylabel('this is y')
xticks([-1,1],['so on -x','so on x'])
yticks([0,2],["dont have","so on y"])

show()

U5-_--CW6DTTNSB-@S-GM2Q-1

上图可以看出修改了x轴,y轴的范围并且在x轴,y轴上面添加了label,在刻度线上面添加了一个标签。

②坐标轴大小的修改
一般来说默认情况下,matplotlib在的坐标轴是一个矩形,我们可以通过一系列的设置,将他变成一个我们想要得到的一个坐标轴。
Ⅰ将矩阵设置成只有下边框(x轴)和左边框(y轴)
格式:
ax=gca() #将边框用参数ax代替
gca().spines['right'].set_color('none') #右边框颜色没有
ax.spines['top'].set_color('none') #上边框颜色设置成没有
#gca为"get current axis" ax和gca() 两种方法都可以

Ⅱ设置原点
众所周知,原点不一定为(0,0),我们可以通过设置对原点进行设置
格式:
ax.spines['bottom'].set_position(('data',1))
ax.spines['left'].set_position(('data',1))

Ⅲ设置x轴y轴
格式:
ax.xaxis.set_ticks_position("bottom")
ax.yaxis.set_ticks_position("left")
ZU5--89-8K-ENU-W-S79B-F
可见原点坐标变成了(-1,-1),右边框和上边框都已经不见了

3、在图片里面添加一个注解
有时候我们会对某一特殊点单独列出,并且对特殊点进行注解。现在我们以函数y=2x+1,特殊点(1,3)进行注解

①首先确定的是点,
格式:scatter(x0,y0,s=,color='') //这里的s是大小的意思(size)

②其次是分别向x轴和y轴分别做垂线,样式的话可以为虚线,
格式:plot([x0,x0],[0,y0],color='',linestyle='--') //对于x轴的垂线
plot([x0,0],[y0,y0].color='',linestyle='')

③使用annotate可以对点进行描述:
annotate(r'$2x+1=%s$'%y0,xy=(x0,y0),xycoords='data',xytext=(+30, -30), textcoords='offset points', fontsize=16,arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
在这个里面主要是样式的一些选择:在字体样式里面的r'$2x+1=%s$'%y0主要是使用了LateX,其他的样式看看就可以了,不要求深记
C--L7-22YOY@X938FC37--D

三、其他种类的图像

1、散点图scatter
格式:scatter(x,y,s=,alpha=,c='') //alpha代表的是透明度,c代表的是color,s代表的是size
3U9@0OZ@2-A@8PV1-JFGPT7

2、柱状图bar
格式:bar(X,Y,facecolor='',edgecolor='') //facecolor指的是柱状图里面的颜色,edgecolor指的是柱状图边框的颜色
如果还想在柱状图的上方或者下方添加字的时候就要再添加这样的格式:

X=arange(5)
y1=random.rand(5)
y2=-y1


bar(X,y1,alpha=0.5,facecolor='red',edgecolor='black')
bar(X,y2,alpha=0.5,facecolor='green',edgecolor='black')
for x,y in zip(X,y1):
    text(x+0.004,y+0.005,'%f'%y,ha='center',va='top')  #参数x+和y+代表的是以数据点为参照点的空间移动,表的是水平方向,va代表的是垂直方向,%y代表的是输入的内容。

for x,y in zip(X,y2):
    text(x,y+0.005,'%f'%y,ha='center',va='bottom')
show()

S-46AX-A7J-16P-Y4OF-HLK

3、等高线contours
等高线本身就是三维图像在二维图像上的投影。等高线的高低就是将二维平面化成x*x个正方形网格,若点存在于网格之中则网格高度+1
①第一步,准备三维函数以及待投影平面的网格坐标
格式:

def f(x,y):
    return (1-x/2+x**5+y**3)*exp(-x**2-y**2)    #三维函数并不唯一
X,Y=meshgrid(x,y)    #网格坐标

②第二步:绘制等高线
格式:C=contour(X,Y,f(X,Y),9,colors='black',linewidths=.5) /#9代表了2+7个区域,如果为10的话就为2+8个区域
③第三步:绘制等高区域
格式:contourf(X,Y,f(X,Y),9,alpha=0.5,cmap=cm.hot) #cmap代表的是区域的颜色
④第四步:在等高线添加高度与数字
格式:clabel(C,inline=False,fontsize=5) #incline=True表示的是字显示在线里面

例:

#encodinfg:utf-8
from numpy import *
from pandas import *
from matplotlib.pyplot import *

#//等高线
def f(x,y):
    return (1-x/2+x**5+y**3)*exp(-x**2-y**2)

n=256
x=linspace(-3,3,n)
y=linspace(-3,3,n)
X,Y=meshgrid(x,y)

contourf(X,Y,f(X,Y),9,alpha=0.5,cmap=cm.hot)

C=contour(X,Y,f(X,Y),9,colors='black',linewidths=.5)
clabel(C,inline=False,fontsize=5)
xticks(())
yticks(())

show()

O-D3--E8-D4-QB-8KW7H-4P-1

四、多个图像排布

1、绘制子图
①格式:subplot(a,b,index) #分成a行b列,当前是第index的plot
例:

#encodinfg:utf-8
from numpy import *
from pandas import *
from matplotlib.pyplot import *

x=linspace(-2,2,50)
y=x**2
figure()
subplot(2,2,1)
plot([0,1],[0,1])

subplot(2,2,4)
plot(x,y)

show()

AF@-@TVD_8L-PO-T3-44-MP

②格式:ax1=subplot2grid((3,3),(0,0),colspan=3,rowspan=1) #分成3行3列,从(0,0)开始,跨3列1行
例:

#encodinfg:utf-8
from numpy import *
from pandas import *
from matplotlib.pyplot import *

#子图
figure()
x=linspace(-3,6,50)
y1=x**2
y2=sin(x)
ax1=subplot2grid((3,3),(0,0),colspan=3,rowspan=1)
ax1.set_xlim((0,6))
ax1.set_ylim((0,8))
plot(x,y1)
ax2=subplot2grid((3,3),(1,0),rowspan=2,colspan=2)
ax2.set_xlim(-3,9)
ax2.set_ylim(0,1)
plot(x,y2)

show()

4-P9N7--BGUY_L0-J-6@E-C