matplotlib 各类图表用法

 

折线图:

 

示例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()函数参数列表

 参数列表

  1.  x : array-like
  2.  explode : array-like, optional, default: None(设置饼图偏离)
  3.  labels : list, optional, default: None(标签)
  4.  colors : array-like, optional, default: None(颜色设置)
  5.  autopct : None (default), string, or function, optional(设置百分比显示)
  6.  pctdistance : float, optional, default: 0.6(百分比距圆心的位置)
  7.  shadow : bool, optional, default: False(设置阴影)
  8.  labeldistance : float, optional, default: 1.1(标签距圆心的距离)
  9.  startangle : float, optional, default: None(开始位置的旋转角度,第一个分类是在右45度位置)
  10.  radius : float, optional, default: None(设置半径的大小)
  11.  counterclock : bool, optional, default: True(设置扇形图排列顺序,True为逆时针排序, False为顺时针排序)
  12.  wedgeprops : dict, optional, default: None(将扇状图,设置成环状图,width设置环大小)
  13.  textprops : dict, optional, default: None(设置标签文本相关属性)
  14.  center : list of float, optional, default: (00)(设置中心位置)
  15.  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')

显示效果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值