from matplotlib import pyplot as plt # 导入matplotlib模块
plt.plot(x, y, color, linestyle, linewidth, marker, markerfacecolor, markersize, label):
x:对应x轴数据
y:对一个y轴数据
color:线条颜色(很多很多种)
linestyle:线型(好几种)
linewidth:线宽(好几种)
marker:标记,画出来的图上的点的形状(很多种)
markerfacecolor:标记填充颜色(颜色种类同color)
markersize:标记尺寸
label:标签图例
注意:
最后要有一个plt.show()才能把图形画出来
画图之前需要创建画布figure和坐标系axes
第一次执行plt.xxx()程序的时候,系统会自动创建一个画布和坐标系,如果不设置的话,只会存在一个画布和坐标系,后续画的所有图,都会在一个坐标系显现
plt,figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True):创建画布
num:画布编号,如果是数字,则会在左上角显示"figure x",如果是字符串,则会在左上角显示 “字符串”
figsize:画布的大小,单位英寸,默认6.4*4.8
dpi:分辨率,默认100
facecolor:背景颜色,画布上除了画图区域以外的颜色
edgecolor:边框线颜色
frameon:是否显示边框
matplotlib 在使用过程中,可能会遇到中文或者负号显示乱码的问题,把下面代码粘贴到matplotlib 使用的最前面即可
import matplotlib.pyplot as plt
# 通过rc参数修改字体为黑体,就可以显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
# 通过rc参数修改字符显示,就可以正常显示负号
plt.rcParams['axes.unicode_minus'] = False
pit.xlim(xmin= , xmax= ):设置x轴显示最小值和最大值,也可以用元组来表示pit.xlim(( xmin,xmax)):
pit.ylim(ymin= , ymax= ):设置y轴显示最小值和最大值,也可以用元组来表示pit.ylim(( ymin,ymax)):
这里的作用只是定格画面,其余没有显示的部分不是没有画,拖动画面可以看到
plt.xlabel(‘名字’,frontsize):设置横坐标标签以及字体大小
plt.ylabel(‘名字’,frontsize):设置纵坐标标签以及字体大小
plt.xticks(ticks=None, labels=None):
ticks表示x轴刻度的位置,需要上传列表,
labels表示刻度上的数字,也需要上传列表
如果上传了ticks,但是labels没有上传,则默认labels和ticks一致,
如果ticks上传空列表,则表示,去掉刻度,但是轴还在
plt.xticks():可以获取刻度和标签
# 例如
import matplotlib.pyplot as plt
import numpy as np
plt.figure(1)
x = np.array(range(10))
plt.plot(x, x**2, 'red')
plt.xticks([1, 3, 5, 7, 9], ['a', 'e', 'i', 'o', 'u'])
plt.show()
print(plt.xticks())
a, b = plt.xticks() # 获取刻度和标签,解包
print(a) # 刻度
print(b) # 标签
# 终端显示
(array([1, 3, 5, 7, 9]), [Text(1, 0, 'a'), Text(3, 0, 'e'), Text(5, 0, 'i'), Text(7, 0, 'o'), Text(9, 0, 'u')])
[1 3 5 7 9] # 刻度
[Text(1, 0, 'a'), Text(3, 0, 'e'), Text(5, 0, 'i'), Text(7, 0, 'o'), Text(9, 0, 'u')] # 标签
plt.axis(‘off’):关掉坐标轴,就是关掉所有坐标轴,光秃秃的,只有图像
# 例如
import matplotlib.pyplot as plt
import numpy as np
plt.figure(1)
x = np.array(range(10))
plt.plot(x, x**2, 'red')
plt.xticks([1, 3, 5, 7, 9], ['a', 'e', 'i', 'o', 'u'])
plt.axis('off')
plt.show()
plt.gca():获取坐标体系,返回一个实例对象,
再通过实例对象调用spines属性,可以通过’top’、‘bottom’、‘left’、‘right’ 参数获得指定的边框
然后调用set_color方法来指定颜色
# 例如
import matplotlib.pyplot as plt
import numpy as np
plt.figure(1)
x = np.array(range(10))
plt.plot(x, x**2, 'red')
plt.xticks([1, 3, 5, 7, 9], ['a', 'e', 'i', 'o', 'u'])
plt.gca().spines['top'].set_color('yellow') # 上边框黄色
plt.gca().spines['bottom'].set_color('green') # 下边框绿色
plt.gca().spines['left'].set_color('red') # 左边框红色
plt.gca().spines['right'].set_color('blue') # 右边框蓝色
plt.show()
当set_color颜色指定为‘None’的时候,不显示该边框
plt,gca()获取坐标体系
调用xaxis,获取x轴
调用set_ticks_position,设置位置
plt.gca().xaxis.set_ticks_position(‘top’) # 将x轴放到上面去
# 例如
import matplotlib.pyplot as plt
import numpy as np
plt.figure(1)
x = np.array(range(10))
plt.plot(x, x**2, 'red')
plt.xticks([1, 3, 5, 7, 9], ['a', 'e', 'i', 'o', 'u'])
plt.gca().xaxis.set_ticks_position('top') # x轴放到上边
plt.gca().yaxis.set_ticks_position('right') # y轴放到右边
plt.show()
通过plt,gca()获取坐标体系
调用spines属性获取参数指定坐标轴边框’top’、‘bottom’、‘left’、‘right’
通过set_position方法来指定位置,可选参数有:
‘outward’:表示将轴脊置于移出数据区域指定点数的位置
‘axes’:表示将轴脊置于指定的坐标系中(0.0~1.0)
‘data’:表示将轴脊置于指定的数据坐标的位置
‘center’:值为(‘axes’,0.5)
‘zero’:值为(‘data’,0.0)
# 例如
import matplotlib.pyplot as plt
import numpy as np
plt.figure(1)
x = np.array(range(10))
plt.plot(x, x**2, 'red')
plt.xticks([1, 3, 5, 7, 9], ['a', 'e', 'i', 'o', 'u'])
plt.gca().spines['top'].set_position(('data', 40)) # 将上面的边框已到y=40的位置
plt.gca().spines['right'].set_position(('data', 5)) # 将右边的边框移到x=5的位置(不能传字符串)
plt.show()
plt.legend(handles, labels, loc, frontsize, frameon, edgecolor, facecolor):
handle:控制柄,控制显示哪个图形的图例,列表形式按顺序上传plot的返回值 如果传空列表,则不显示图例
labels:标签上传列表,可以按顺序在列表里面上传多个元素,默认将plot的label组成列表
loc:位置(),默认best最好的位置,可选参数(best、upper right、upper left、lower left、lower right、right、center left、center right、lower center、upper center、center)
frontsize:字体大小
frameon:图例边框
edgecolor:边框颜色
facecolor:背景颜色(如果没有边框,则背景颜色不会显示)
# 例如
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(1)
x = np.array(range(10))
plt.plot(x, x**2, 'red', label='啥也不是') # 在plot中传label
plt.xticks([1, 3, 5, 7, 9], ['a', 'e', 'i', 'o', 'u'])
plt.legend() # 在这里可以显示,如果不加这个,则显示不出来标签
plt.show()
# 例如
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(1)
x = np.array(range(10))
plt.plot(x, x**2, 'red', label='啥也不是')
plt.xticks([1, 3, 5, 7, 9], ['a', 'e', 'i', 'o', 'u'],label="啥也不是")
plt.legend(labels=['也不知道是啥']) # 如果这里labels和plot里的label不一致,则以这里为准,可以理解为将plot的label拿到这里做了修改
plt.show()
# 例如
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(1)
x = np.array(range(10))
test1, = plt.plot(x, x**2, 'red', label='这也不是')
test2, = plt.plot(x, x**3, 'red', label='那也不是')
plt.xticks([1, 3, 5, 7, 9], ['a', 'e', 'i', 'o', 'u'], label="啥也不是")
plt.legend(handles=[test1], labels=['第一个是啥', '第二个是啥'], loc='center') # handles上传test1,则只显示第一个图例‘第一个是啥’,如果这里传test2,也是显示第一个图例‘第一个是啥’,因为这里是按照labels的顺序来的
plt.show()
plt.text(x, y, s, size, color, ha, va):在图上某一点增加文字
x:x轴坐标点位置
y:y轴某一点位置
s:要增加文字内容,字符串形式
size:文字大小
color:文字颜色
ha:垂直对齐,可选 ‘center’, ‘right’, ‘left’(例如:点在文字的左边就是left)
va:水平对齐,可选’top’, ‘bottom’, ‘center’, ‘baseline’, 'center_baseline’例如:点在文字的上边就是top)
# 例如
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(1)
x = np.array(range(10))
test1, = plt.plot(x, x**2, 'red', label='这也不是')
test2, = plt.plot(x, x*2, 'red', label='那也不是')
plt.xticks([1, 3, 5, 7, 9], ['a', 'e', 'i', 'o', 'u'], label="啥也不是")
plt.text(5, 25, "这是哪里", size=10, color='green')
plt.show()
plt.scatter(x, y, s, c, marker, alpha, linewidyhs, edgecolors):
x:x轴数据
y:y轴数据
s:标记点大小
c:标记点颜色
marker:标记点形状
alpha:透明度
linewidths:线宽
edgecolors:边线颜色
# 例如
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(1)
x = np.array(range(10))
plt.scatter(x, x**2, s=20, c='red', marker='D', alpha=0.8, linewidths=1.0, edgecolors='yellow')
plt.show()
plt.bar(x, height, width, color, edgecolors, alpha, linewidths, bottom, align)
x:x轴数据
height:条形的高度
width:条形的宽度
color:条形的颜色
edgecolors:条形边框的颜色
alpha:透明度
linewidths:条形边框的宽度
bottom:条形底边的起始位置,如果高度是6,bottom=3,显示就是从3到9
align:条形的对齐方式,可选’center’, ‘edge’,默认"center",表示刻度和条形中心对齐,“edge” 表示刻度和条形左边对齐
# 例如
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(1)
x = np.array(range(5))
# np.random.randint(x, 5) # x到5之间的离散均匀分布
plt.bar(x, np.random.randint(x, 5), width=0.4, color='teal', edgecolor='sienna', alpha=0.8, linewidth=2, bottom=3, align='edge')
plt.show()
# 例如
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(1)
x = np.array(range(5))
y1 = np.random.randint(x, 5)
y2 = np.random.randint(x, 5)
# np.random.randint(x, 5)
plt.bar(x, +y1, width=0.4, color='teal', edgecolor='sienna', alpha=0.8, linewidth=2, bottom=0.2, align='center')
plt.bar(x, -y2, width=0.4, color='teal', edgecolor='sienna', alpha=0.8, linewidth=2, bottom=-0.2, align='center')
for i in x:
plt.text(list(x)[i], list(y1)[i]+0.2, s=f'{list(y1)[i]}', size=18, color='green', va='bottom', ha='center')
plt.text(list(x)[i], -list(y2)[i]-0.2, s=f'{-list(y2)[i]}', size=18, color='green', va='top', ha='center')
plt.show()
# 例如
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(1)
x = np.array(range(5))
y1 = np.random.randint(x, 5)
y2 = np.random.randint(x, 5)
# np.random.randint(x, 5)
plt.bar(x, y1, width=0.4, color='teal', edgecolor='sienna', alpha=0.8, linewidth=2, bottom=0, align='edge')
plt.bar(x-0.2, y2, width=0.4, color='teal', edgecolor='sienna', alpha=0.8, linewidth=2, bottom=0, align='center')
for i in x:
plt.text(list(x)[i]+0.2, list(y1)[i], s=f'{list(y1)[i]}', size=18, color='green', va='bottom', ha='center')
plt.text(list(x)[i]-0.2, list(y2)[i], s=f'{list(y2)[i]}', size=18, color='green', va='bottom', ha='center')
plt.show()
传入图像的像素值数据,就可以绘制出图像
plt.imshow(x, cmao, aplha)
x: 图像数据(可以是二维的,比如 灰度图;也可以是三维的,比如RGB 图)
cmap:默认彩色,灰度图是 “Greys”,可以通过报错来知道有哪些值可选
alpha:透明度(0-1)
# 例如
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(1)
data = np.array([[0, 50, 100], [150, 200, 250], [300, 350, 400]])
plt.imshow(data)
plt.show()
生成子图
plt.subplor(nrows, ncols, index)
nrows:行数
ncols:列数
index:指定第几个子图
不会重叠
# 例如
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.array(range(5))
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.arcsin(x)
y4 = np.tanh(x)
plt.figure(1)
plt.subplot(2, 2, 1)
plt.plot(x, y1)
plt.subplot(2, 2, 2)
plt.plot(x, y2)
plt.subplot(2, 2, 3)
plt.plot(x, y3)
plt.subplot(2, 2, 4)
plt.plot(x, y4)
plt.show()
plt.axes():以列表形式上传比例
# 例如
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.array(range(5))
y1 = 2*x+1
y2 = x**2
y3 = np.sin(x)
plt.figure()
plt.axes([0.1, 0.1, 0.8, 0.8]) # x轴在画布10%的位置,y轴在画布10%的位置,长和宽分布占画布的80%,第一个0.8是长,也就是x轴方向的长度,第二个0.8是宽,也就是y轴方向的长度
plt.plot(x, y1)
plt.axes([0.6, 0.2, 0.3, 0.3]) # x轴在画布60%的位置,y轴在画布20%的位置,长和宽分布占画布的30%
plt.plot(x, y2)
plt.axes([0.2, 0.6, 0.3, 0.3]) # # x轴在画布20%的位置,y轴在画布60%的位置,长和宽分布占画布的30%
plt.plot(x, y3)
plt.show()
plt.plot()如果只传一个数据则默认是y轴数据,x轴数据会随着y轴数据递增
plt.pause(x)暂停x秒,并显示图像
plt.clf():清除上次上一次的数据
plt.savefig(‘地址+文件后缀’)