折线图:
示例1:
import matplotlib.pyplot as plt
plt.plot([1,2,3,4,5])
plt.ylabel('Number') 设置Y轴标签
plt.show()
执行效果:
示例2:
from matplotlib import pyplot as plt
import numpy as np
# 设置中文字体,防止乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
data = np.linspace(0,2,100)
# print(data.size)
# print(data)
# plot(x轴值,y轴值,lable='标签')
plt.plot(data,data, label='线性值')
plt.plot(data,data**2, label='平方值')
plt.plot(data,data**3, label='立方值')
plt.xlabel('x轴')
plt.ylabel('y轴')
# 显示图标签
plt.legend()
plt.show()
输出效果
设置颜色
plt.plot(data,data, label='线性值', color='#ff0000')
plt.plot(data,data**2, label='平方值', c='green')
plt.plot(data,data**3, label='立方值', c='b')
设置样式
# 设置线条样式
# 可选值有'-' or 'solid' | '--' or 'dashed' | '-.' or 'dashdot' | ':' or 'dotted' 等
plt.plot(data,data, label='线性值', color='#ff0000', linestyle='solid')
plt.plot(data,data**2, label='平方值', c='green', ls='-.')
plt.plot(data,data**3, label='立方值', c='b', ls=':')
设置标志点
# 可选值有:[ 'x' | 'o' | 's' | '+' | '^' | ',' | '.' | '1' | '2' | '3' | '4' ] 等
plt.plot(data,data, color='#ff0000', linestyle='--', marker='^', label='线性值')
plt.plot(data,data**2, c='green', ls='-.', marker='o', label='平方值')
plt.plot(data,data**3, c='b', ls=':', marker='s', label='立方值')
综合设置
# 可以将颜色,样式,标志,3个参数合起来写
plt.plot(data,data, 'r--^', label='线性值')
plt.plot(data,data**2,'g-.o', label='平方值')
plt.plot(data,data**3, 'b:s', label='立方值')
显示效果
在1个plot函数绘制多条折线
plt.plot(data,data,'r-o',data,data**2,'g-.^',data,data**3,'b:s')
如果只需要显示数据点,不显示线的话,可以去掉linestyle 参数,或者将linestylese设置为''空
例如
plt.plot(data,data, 'r^', label='线性值')
plt.plot(data,data**2,'go', label='平方值')
plt.plot(data,data**3, 'bs', label='立方值')
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
条形图
from matplotlib import pyplot as plt
import numpy as np
# 设置中文字体,防止乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
# x轴序列1~12,y轴数据10~100之间的随机整数
X = np.arange(1,13)
# print(X)
Y = np.random.randint(10,100,12)
# print(Y)
x_ticks = ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
# 设置plt.bar()的tick_label参数可以省略plt.xticks(X,x_ticks)
# plt.xticks(X,x_ticks)
# 参数 width设置宽度,tick_label设置x轴刻度标签,facecolor设置条形图颜色, edgecolor设置边缘颜色,
plt.bar(X,Y,width=0.7,tick_label=x_ticks,facecolor='c',edgecolor='r')
# 设置数值标注
for x,y in zip(X,Y):
# 参数ha='center',va='bottom'设置对齐方式
plt.text(x,y+0.5,y,ha='center',va='bottom')
plt.show()
显示效果
绘制横向的条形图与垂直的很相似
# 绘制横向条形图
plt.barh(X,Y,tick_label=x_ticks,facecolor='c',edgecolor='r')
# 设置数值标注
for x,y in zip(Y,X):
# 参数ha='left',va='center' 设置对齐方式
plt.text(x+0.5,y,x,ha='left',va='center')
显示效果
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
扇形图
from matplotlib import pyplot as plt
# 设置中文字体,防止乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
# plt.pie()函数
# matplotlib.pyplot.pie(
# x, explode=None, labels=None, colors=None,
# autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1,
# startangle=None, radius=None, counterclock=True, wedgeprops=None,
# textprops=None, center=(0, 0), frame=False, rotatelabels=False, *, data=None
# )
# 参数x 需要绘制的数据,数组类型,最少需要2个值
# 参数explode 设置需要分裂的距离,数值大小是分割间隙
# 参数autopct='%1.1f%%'
# 参数shadow 是否显示阴影
# 参数radius 设置半径大小
# 参数wedgeprops=dict(width=0.5) 将扇状图,设置成环状图,width设置环大小
#参数pctdistance 设置百分比距离圆心的位置
# 绘制饼图建议先将figure设置成正方形
plt.figure(figsize=(5,5))
tips = ['A','B','C','D']
data = [10,20,30,40]
# 设置explode ,只分裂第3块,即C
exp = (0,0,0.05,0)
# 创建扇形图
plt.pie(data, labels=tips, explode=exp, autopct='%1.1f%%')
# 环形图
plt.pie(
data,labels=tips,explode=exp,autopct='%1.1f%%',
wedgeprops=dict(width=0.5),pctdistance=0.75
)
plt.legend()
plt.show()
显示效果
添加 wedgeprops=dict(width=0.5) 参数将扇形图改成环形图
显示效果
附:plt.pie()函数参数列表
参数列表
- x : array-like
- explode : array-like, optional, default: None(设置饼图偏离)
- labels : list, optional, default: None(标签)
- colors : array-like, optional, default: None(颜色设置)
- autopct : None (default), string, or function, optional(设置百分比显示)
- pctdistance : float, optional, default: 0.6(百分比距圆心的位置)
- shadow : bool, optional, default: False(设置阴影)
- labeldistance : float, optional, default: 1.1(标签距圆心的距离)
- startangle : float, optional, default: None(开始位置的旋转角度,第一个分类是在右45度位置)
- radius : float, optional, default: None(设置半径的大小)
- counterclock : bool, optional, default: True(设置扇形图排列顺序,True为逆时针排序, False为顺时针排序)
- wedgeprops : dict, optional, default: None(将扇状图,设置成环状图,width设置环大小)
- textprops : dict, optional, default: None(设置标签文本相关属性)
- center : list of float, optional, default: (0, 0)(设置中心位置)
- frame : bool, optional, default: False(默认为False,如果为True,则用图表绘制坐标轴框架)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
多画布
传统方法
from matplotlib import pyplot as plt
import numpy as np
# 设置中文字体,防止乱码
data = np.linspace(0,2,10)
square = data**2
cube = data**3
# 创建主画布
plt.figure()
plt.subplot(2,2,1)
plt.plot(data,data)
plt.subplot(2,2,2)
plt.plot(data,square)
plt.subplot(2,2,3)
plt.plot(data,cube)
plt.subplot(2,2,4)
plt.plot(data,data)
plt.plot(data,square)
plt.plot(data,cube)
plt.show()
显示效果
Subplot2grid方式:
# subplot2grid方式
# plt.subplot2grid()
# 参数 shape=(m,n) 将figure拆分成m行,n列
# 参数 loc=(0,0) 设置当前subplot的在figure中的位置,下标从0开始,(0,0)表示左上角第1个subplot
# 参数 colspan=w 设置subplot的宽度占多少列
# 参数 rowspan=h 设置subplot的高度占多少行
ax1 = plt.subplot2grid(shape=(3,3),loc=(0,0),colspan=1,rowspan=1,)
ax1.plot(data,data)
ax1.set_title('data')
ax2 = plt.subplot2grid((3,3),(1,1),colspan=1,rowspan=1)
ax2.plot(data,square)
ax2.set_title('square')
ax3 = plt.subplot2grid((3,3),(2,2),colspan=1,rowspan=1)
ax3.plot(data,cube)
ax3.set_title('cube')
显示效果:
# subplots方式
# def subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
# return_1 fig : :class:matplotlib.figure.Figure object,
# return_2 ax : Axes object or array of Axes objects.
# 参数 nrows 设置figure 的行
# 参数 ncols 设置figure 的列
# 参数 sharex 设置subplot 是否共享x轴坐标
# 参数 sharey 设置subplot 是否共享y轴坐标
# 返回值1 返回一个figure对象
# 返回值2 返回1个axes对象,或者axes对象数组
#返回axes对象数组的写法
figure,([ax1,ax2],[ax3,ax4]) = plt.subplots(nrows=2,ncols=2,sharex=True,sharey=False)
ax1.plot(data,data)
ax2.plot(data,square)
ax3.plot(data,cube)
ax4.plot(data,data,'r-',data,square,'b-.',data,cube,'g--')
# 返回1个axes对象的写法
figure,axes = plt.subplots(nrows=2,ncols=2,sharex=True,sharey=False)
axes[0,0].plot(data,data)
axes[0,1].plot(data,square)
axes[1,0].plot(data,cube)
axes[1,1].plot(data,data,'r-',data,square,'b-.',data,cube,'g--')
2种形式的效果都是一样的
附axes对象类型
print(type(axes))
print(type(axes[0,0]))
print(type(axes[0,1]))
print(type(axes[1,0]))
print(type(axes[1,1]))
<class 'numpy.ndarray'>
<class 'matplotlib.axes._subplots.AxesSubplot'>
<class 'matplotlib.axes._subplots.AxesSubplot'>
<class 'matplotlib.axes._subplots.AxesSubplot'>
<class 'matplotlib.axes._subplots.AxesSubplot'>
# 画中画
figure = plt.figure()
x = [1,2,3,4,5,6,7]
y = [1,3,2,5,4,7,6]
# 使用figure.add_axes([left,bottom,width,height]) 方法向画布中添加axes
# 注意left,bottom 2个点是确定axes 的左下角的位置, 即坐标轴原点(0,0)的位置
# width,height的值是相对整个figure的占比
left,bottom,width,height = 0.1,0.1,0.8,0.8
ax1 = figure.add_axes([left,bottom,width,height])
ax1.plot(x,y,'r')
ax1.set_title('ax1')
# 使用figure.add_axes() 再画布的左上角再添加一个axes
ax2 = figure.add_axes([0.15,0.6,0.25,0.25])
ax2.plot(y,x,'g')
ax2.set_title('ax2')
# 也可以直接使用plt.axes()在figure中添加axes
# 例如
plt.axes([0.6,0.2,0.25,0.25])
plt.plot(y,x,'b')
plt.title('ax3')
显示效果
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
设置坐标轴
本次用到的数据,是-10~10 的平方
x = np.linspace(-10,10,11)
y = x**2
# print(x)
# x = [-10. -8. -6. -4. -2. 0. 2. 4. 6. 8. 10.]
# print(y)
# y = [100. 64. 36. 16. 4. 0. 4. 16. 36. 64. 100.]
默认显示效果如下
设置坐标轴的范围
使用plt.xlim(min,max)或者plt.ylim((min,max))设置x轴,或y轴的范围,
例如
# 设置x轴范围
plt.xlim(-20,20)
# 设置y轴范围
plt.ylim((-10,110))
显示效果:注意对比x,y轴坐标范围
设置坐标轴的刻度
使用
# 设置x轴刻度
x_ticks = np.linspace(-20,20,5)
print(x_ticks)
#x_ticks = [-20. -10. 0. 10. 20.]
plt.xticks(x_ticks)
# 设置y轴刻度
# 使用2个列表将y轴刻度映射为自定义值
plt.yticks([0,20,40,60,80,100],['zero','very bad','bad','not bad','good','very good'])
显示效果
修改坐标轴位置
# 首先使用plt.gca()方法坐标轴
# gca = 'get current axis'
ax = plt.gca()
# 将top,right颜色设置为none 即不显示
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
# 将bottom绑定为x轴
ax.xaxis.set_ticks_position('bottom')
# 将left绑定为y轴
ax.yaxis.set_ticks_position('left')
# 设置bottom的位置
ax.spines['bottom'].set_position(('data',0))
# 设置left的位置
ax.spines['left'].set_position(('data',0))
显示效果
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
图例与标注
使用plt.legend() 即可显示图例
辅助线绘制方法
# 设置辅助虚线[起点x,终点x],[起点y,终点y]
plt.plot([1,1],[0,1],'k--')
显示效果
标注绘制
# 使用plt.annotate()方法设置标注
# annotate的参数比较多
# s=标注显示的文本内容
# xy=(x坐标,y坐标) 箭头指向的x坐标,y坐标
# xytext(x坐标,y坐标) 标注文本显示的位置(x坐标,y坐标)
# arrowprops 标注参数,使用dict()方法封装
# arrowstyle 箭头样式
# connectionstyle 连接线条样式
plt.annotate(
s=r'1的平方,立方都等于1',
xy=(1,1),
xytext=(0.25,3),
arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=0.2')
)
显示效果
附:
arrowstyle
箭头样式
Name | Attrs |
'-' | None |
'->' | head_length=0.4, head_width=0.2 |
'-[' | widthB=1.0, lengthB=0.2,angleB=None |
'|-|' | widthA=1.0, widthB=1.0 |
'-|>' | head_length=0.4, head_width=0.2 |
'<-' | head_length=0.4, head_width=0.2 |
'<->' | head_length=0.4, head_width=0.2 |
'<|-' | head_length=0.4, head_width=0.2 |
'<|-|>' | head_length=0.4, head_width=0.2 |
'fancy' | head_length=0.4, head_width=0.4, tail_width=0.4 |
'simple' | head_length=0.5, head_width=0.5, tail_width=0.2 |
'wedge' | tail_width=0.3, shrink_factor=0.5 |
Connectionstyle
标注连接线条样式
Name | Attrs |
angle | angleA=90, angleB=0, rad=0.0 |
angle3 | angleA=90, angleB=0 |
arc | angleA=0, angleB=0, armA=None, armB=None, rad=0.0 |
arc3 | rad=0.0 |
bar | armA=0.0, armB=0.0, fraction=0.3, angle=None |
也可使用辅助线加plot.text()的形式实现类似的效果
# 显示辅助线
plt.plot([1.5,2],[8,8],'r--')
plt.plot([1.75,2],[4,4],'g--')
plt.plot([2,2],[0,2],'b--')
# 使用plt.text(x,y,s)显示文本,参数x坐标,y坐标,文本内容
plt.text(1.5,8.1,r'x=2,y=8')
plt.text(1.75,4.1,r'x=2,y=4')
plt.text(1.75,1,r'x=2,y=2')
显示效果