matplotlib查漏补缺

1187-吴同学

发表文章数:38

首页 » 数据科学库 » 正文

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
#用于处理时间数据

常用参数

参数 调整部分 示例
s 点的面积 s=100
c 颜色 c=‘r’
maker 点的形状 maker=’<’
alpha 透明度 alpha=0.5

常用图

代码 独有参数
散点图 plt.scatter(x,y)
折线图 plt.plot(x,y)
条形图 plt.bar(left,height) width设置宽度;orientation=‘horizontal’默认为‘vertical,水平时plt.bar(left=0, bottom=index, width=y,height=0.5,orientation=‘horizontal’)
横向的条形图 plt.barh(bottom,width)
直方图 plt.hist(data) bins表示每个长方形的宽;normed=True表示对数据进行标准化(纵坐标则变为频率);用orientation='horizontal’调整水平
双变量直方图 plt.hist2D(x,y) 如直方图
饼状图 plt.pie(x,labels) autopc=’%.1f%%'格式化百分比字符串;explode=[列表元素表示每个块离圆心的距离];plt.axes(aspect=1)加在前,画出的是xy轴1比1的正圆;shadow=True表示有阴影
箱线图 plt.boxplot(x,labels) sym='o’表示异常点的形状为圆形;whis异常值界限

画多列的条形图

left=index+bar_width

index=np.arange(4)

sales_BJ=[52,55,63,53]
sales_SH=[44,66,55,41]

bar_width=0.3

plt.bar(index,sales_BJ,bar_width,color='b')
plt.bar(index+bar_width,sales_SH,bar_width,color='r')
plt.show()

matplotlib查漏补缺

层叠图

bottom=上一列数的顶端

plt.bar(index,sales_BJ,bar_width,color='b')
plt.bar(index,sales_SH,bar_width,color='r',bottom=sales_BJ)
plt.show()

matplotlib查漏补缺

有重点的饼图


labels = 'A', 'B', 'C', 'D'
fracs = [15, 30, 45, 10]
plt.axes(aspect=1)##xy轴的比例
explode = (0, 0.2, 0, 0)
plt.pie(fracs, explode=explode, labels=labels, autopct='%.0f%%', shadow=True)
plt.show()

matplotlib查漏补缺

坐标为时间的图

  1. 用np.loadtxt导入数据时,添加参数converters={0:mdates.bytespdate2num(’%m/%d/%Y’)}#0表示第几列设为时间,mdates 为import matplotlib.dates as mdates
    此时时间数据转化为浮点数,画图用plt.plot_date(date , y ),默认是散点图,可用linestyle=’-'调整线型

颜色和样式

color选择 示例
八种默认缩写 b(bllue),g(green),r(red),c(cyan),m(magenta),y(yellow),k(black),w(white)
灰色阴影 color=‘数字’
html十六进制 color=‘#FFOOFF’ 颜色代码
RGB元组 color=(1,2,3)
maker选择 样式
‘.’ point
‘,’ pixel
‘o’ circle
‘v’ triangle_down
‘^’ triangle_up

若不加**maker=**则只有点,没有线

线型 代码
实线 ‘-‘
虚线 ‘–’
点划线 ‘-.’
点线 ‘:’

样式字符串:颜色点型线型,如‘ro–’表示红色圆点虚线

用面向对象的方式

matplotlib对象 简介
FigureCanvas 画布
Figure
Axes 在Figure上生成的坐标轴,实际画图的地方

画子图

方法一:用面向对象的方式

  1. fig=plt.figure() #生成一个一个Figrue实例,即画图对象,可添加Axes实例
  2. ax=fig.add_subplot(111) #生成Axes实例,即一个坐标轴对象
    参数一:子图总函数
    参数二:子图总列数
    参数三:子图位置
import matplotlib.pyplot as plt
import numpy as np

x=np.arange(1,100)

fig=plt.figure()
ax1=fig.add_subplot(221)
ax1.plot(x,x)

ax2=fig.add_subplot(223)
ax2.plot(x,-x)

ax3=fig.add_subplot(122)
ax3.plot(x,x*x)

plt.show()

matplotlib查漏补缺

方法二: 用pyplot中简单的函数画子图(可交互)
用plt.subplot(111)#参数一:子图总函数;参数二:子图总列数;参数三:子图位置

import matplotlib.pyplot as plt
import numpy as np

x=np.arange(1,100)
plt.subplot(221)
plt.plot(x,x)

plt.subplot(223)
plt.plot(x,-x)

plt.subplot(122)
plt.plot(x,x*x)
plt.show()

matplotlib查漏补缺

生成多张图

区别于一张图生成多个子图
fig1=plt.figure()
fig2=plt.figure()
生成多个plt.figure()实例

x=np.arange(1,100)

fig1=plt.figure()
ax1=fig1.add_subplot(211)
ax1.plot(x,x)
ax2=fig1.add_subplot(212)
ax2.plot(x,-x)
plt.show()

fig2=plt.figure()
ax3=fig2.add_subplot(111)
ax3.plot(x,x*x)
plt.show()

matplotlib查漏补缺

网格

方法1: plt的函数(可交互)
plt.grid(True)# 有网格,也可省略True,直接写参数设置
plt.grid() # 无网格

其他参数 意义
color=‘r’ 颜色为红色
linewidth=‘2’ 宽度为2
linestyle=‘-’ 线型为直线

方法2:面向对象的方式
fig=plt.figure()
ax =fig.add_subplot(111)
ax.plot(x,x)
ax.grid()

图例

方法1: plt的函数(可交互)

  1. plt.plot(x,y,label=‘Normal’) #需要用label参数
  2. plt.legend()
参数 参数值
loc位置 0:best;1:upper right;2:upper left;3 lower left;4:lower right
ncol 排成几列

方法2:plt的函数(可交互)

  1. plt.plot(x,y) #不需要用label参数
  2. plt.legend([‘label1’,‘label2’,…])

方法3:面向对象
fig=plt.figure()
ax =fig.add_subplot(111)
ax.plot(x,x)
ax.legend([‘label’])

方法4:面向对象
fig=plt.figure()
ax =fig.add_subplot(111)
ax.plot(x,x,label=‘名称’)
ax.legend()

坐标轴

坐标轴范围调整

plt方法:

  1. 通过plt.axis([xmin,xmax,ymin,ymax])
  2. 通过plt.xlim([xmin,xmax])和plt.ylim([ymin,ymax])分别调整,也可通过xmin=a,ymax=b只调整一边

坐标轴刻度调整

面向对象的方法:
setp1: plt.plot(x,y) #返回一个图
setp2: ax=plt.gca() #get current axes 获取当前图形的坐标轴
setp3: ax.locator_params(nbins=10) #nbins调整xy轴的刻度有多少格

/qquad

单独调整x轴:ax.locator_params(‘x’,nbins=10)

/qquad

单独调整y轴:ax.locator_params(‘y’,nbins=10)

日期坐标轴调整

面向对象的方法:
import datetime
import matplotlip as mpl
setp1: plt.figure()获取一张图
setp2: 设置时间

/qquad

start=datetime.datetime(2020,1,1) #设置起始日期

/qquad

stop=datetime.datetime(2021.1.1) #设置结束日期

/qquad

delta=date.timedelta(days=1) # 设置日期间隔

/qquad

dates=mpl.dates.drange(start,end,delta) #生成一串时间

/qquad

ax=plt.gca()

/qquad

date_format=mpl.dates.DateFormatter(’%Y-%m-%d’) #设置日期的格式

/qquad

ax.xaxis.set_major_formatter(date_format) #导入格式

/qquad

ax.plot_date(dates,y)

/qquad

fig.autofmt_xdate() #日期排版根据图像大小自适应

/qquad

plt.show

添加新坐标

twinx生成新的Y轴,twiny生成新的X轴
plt的方式
setp1: plt.plot(w,y1) #返回一个图
setp2:plt.twinx() #添加新坐标轴
setp3:plt.plot(x,y2) # 在新的坐标轴上画图

面向对象的方式
setp1:fig=plt.figure()

/qquad

ax1=fig.add_subplot(111)

/qquad

ax1.plot(x,y1)

/qquad

ax1.set_ylabel(‘Y1’)

/qquad

ax2=ax1.twinx()

/qquad

ax2.plot(x,y2)

/qquad

ax2.set_ylabel(‘Y2’)

/qquad

ax1.set_xlabel(‘compare Y1 and Y2’)

/qquad

plt.show()

matplotlib查漏补缺

画箭头注释

plt方法:
x=np.arange(-10,10,0.01)
y=x*x
plt.plot(x,y)
plt.annotate(‘this is the bottom’,xy=(0,1),xytext=(0,20),

/qquad

arrowprops=dict(facecolor=‘r’,frac=1,headwidth=20,width=12))
plt.show()

annotate参数 解释
第一个参数 注释的文字
xy 注释的指向
xytext 文字起始的坐标
arrowprops 设置箭头的参数
(facecolor箭头颜色,frac箭头所占比例,headwidth箭头宽度,width箭尾宽度)

matplotlib查漏补缺

纯文字注释

plt方法
plt.text(0,20,‘function:y=x^2’) #前两个参数为未知参数,第三个为注释文字
若注释文字前加r,如r’function:/t y=x^2’表示字符串不转义

其他参数 调整对象 参数值
family 字体 ‘serif’,‘sans-serif’,'fantasy’官网可查
size 字体大小 数字
color 颜色 ‘r’,‘g’,…
style 是否倾斜 ‘normal’,‘italic’
weight 字体粗细 0到1000的数字
bbox 文本框 dict{facecolor=‘r’,alpha=0.5} facecolor文本框背景色,alpha背景色透明度

面向对象方法
ax=fig.add_subplot(111)
ax.text() 其他与上述相同

tex公式编辑

在文本中r‘ ’ 两个 $之间加公式,前加r
plt方法仍然用plt.text()函数

填充颜色 fill,fill_between

plt方法(面向对象只需要ax=fig.add_subplot(111),ax.fll())
fill: 填充与x轴围成的区域 plt.fill(x,y1,‘b’,alpha=0.3) #‘b’表示颜色为蓝色,alpha为透明度
matplotlib查漏补缺
fill_between:填充线之间的区域
plt.fill_between(x,y1,y2,where=y1<y2,facecolor=‘green’,alpha=0.2)
plt.fill_between(x,y1,y2,where=y1>y2,facecolor=‘red’,alpha=0.3)
#where写条件表达式,facecolor写填充的颜色
matplotlib查漏补缺
对稀疏的x,用参数interpolate=True填充空白

画图形

import matplotlib.patches as mpatches

fig,ax=plt.subplots()
xy1=np.array([0.2,0.2]) #设置图像位置
circle=mpatches.Circle(xy1,0.1)#第一个为位置参数(圆形是圆心),第二个参数为半径
ax.add_patch(circle) #将生成的图形放到图上
plt.axis(‘equal’) #调整xy轴比例
plt.show()

长方形
rect=mpatches.Rectangle(xy2,0.2,0.1) #第一个为位置参数(长方形为左下角) ,接下来是长宽

多边形
polygon=mpaches.RegularPolygon(xy3,5,0.3)# 第一个为位置参数(多边形的中心),第二个是边数,第三个是半径

椭圆
ellipse=mpaches.Ellipse(xy4,0.4,0.2) #第一个为未知参数(椭圆中心),接下来是长轴和短轴

美化

基础版:


fig, axes = plt.subplots(nrows=2, ncols=2)
ax1, ax2, ax3, ax4 = axes.ravel()
x, y = np.random.normal(size=(2, 100))
ax1.plot(x, y, 'o')

x = np.arange(0, 10)
y = np.arange(0,10)
ncolors = len(plt.rcParams['axes.prop_cycle'])  # plt.rcParams是一个颜色组
shift = np.linspace(0, 10, ncolors)  # 每条线之间的间距
for s in shift:
    ax2.plot(x, y + s, '-')

x = np.arange(5)
y1, y2, y3 = np.random.randint(1, 25, size=(3, 5))
width = 0.25
ax3.bar(x, y1, width)
ax3.bar(x + width, y2, width)
ax3.bar(x + 2 * width, y3, width)

for i,color in enumerate(['r','y','c','b','g']):
    xy=np.random.normal(size=2)
    ax4.add_patch(plt.Circle(xy,radius=0.4,color=color,alpha=0.4))
ax4.axis('equal')

plt.show()

matplotlib查漏补缺
通过 plt.style.use(‘seaborn’) 来选择一些自带的样式

样式可通过plt.style.available进行查询
‘Solarize_Light2’, ‘_classic_test_patch’, ‘bmh’, ‘classic’, ‘dark_background’, ‘fast’, ‘fivethirtyeight’, ‘ggplot’, ‘grayscale’, ‘seaborn’, ‘seaborn-bright’, ‘seaborn-colorblind’, ‘seaborn-dark’, ‘seaborn-dark-palette’, ‘seaborn-darkgrid’, ‘seaborn-deep’, ‘seaborn-muted’, ‘seaborn-notebook’, ‘seaborn-paper’, ‘seaborn-pastel’, ‘seaborn-poster’, ‘seaborn-talk’,‘seaborn-ticks’, ‘seaborn-white’, ‘seaborn-whitegrid’, ‘tableau-colorblind10’]
matplotlib查漏补缺

极坐标

以角度和半径为坐标
r=np.arange(1,6,1)
theta=np.arange(0,2.5,0.5)*np.pi
ax=plt.subplot(111,projection=‘polar’)#用projection='polar’将坐标改为极坐标
ax.plot(theta,r,color=‘r’,linewidth=3)
plt.grid(True)
plt.show()
matplotlib查漏补缺

函数积分图

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Polygon

def func(x):
    return -(x-2)*(x-8)+30
x=np.linspace(0,10,100)
y=func(x)

fig,ax=plt.subplots()
plt.plot(x,y,'r')

#x轴上标记a,b
a,b=2,9
ax.set_xticks([a,b])
ax.set_yticks([])
ax.set_xticklabels(['$a$','$b$'])

#在图外标记x,y轴
plt.figtext(0.94,0.03,'$x$')
plt.figtext(0.01,0.9,'$y$')

#生成阴影部分
ix=np.linspace(a,b)
iy=func(ix)
ixy=zip(ix,iy)
verts=[(a,0)]+list(ixy)+[(b,0)]
poly=Polygon(verts,facecolor='0.8',edgecolor='0.5')
ax.add_patch(poly)

#写上公式
plt.text((a+b)*0.5,20,'$/int_a^b -(x-2)*(x-8)+30dx$',
         size=18,horizontalalignment='center',
         family='fantasy')
plt.show()

matplotlib查漏补缺

散点条形图

构图准备
matplotlib查漏补缺

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Polygon

#数据
plt.style.use('ggplot')
x=np.random.randn(200)
y=x+np.random.randn(200)*0.3

#间隙
margin_border=0.1
width=0.6
height=0.2
margin_between=0.02

#各个子图的位置
#散点图位置坐标
left_s=margin_border
bottom_s=margin_border
height_s=width
width_s=width
#x轴条形图坐标
left_x=margin_border
bottom_x=margin_border+width+margin_between
height_x=height
width_x=width
#y轴条形图坐标
left_y=margin_border+width+margin_between
bottom_y=margin_border
height_y=width
width_y=height

#生成自定义的位置
plt.figure(1,figsize=(8,8))#生成一个正方形画布
rect_s=[left_s,bottom_s,width_s,height_s]
rect_x=[left_x,bottom_x,width_x,height_x]
rect_y=[left_y,bottom_y,width_y,height_y]

axScatter=plt.axes(rect_s)
axHistX=plt.axes(rect_x)
axHistY=plt.axes(rect_y)

matplotlib查漏补缺

#去掉条形图散点图的重复坐标
axHistX.set_xticks([])
axHistY.set_yticks([])

matplotlib查漏补缺

#画图
#设置坐标轴的刻度范围
bin_width=0.25
xymax=np.max([np.max(np.fabs(x)),np.max(np.fabs(y))])
lim=int(xymax/bin_width+1)*bin_width

axScatter.set_xlim(-lim,lim)
axScatter.set_ylim(-lim,lim)
axHistX.set_xticks(axScatter.get_xlim())
axHistX.set_yticks(axScatter.get_xlim())
axScatter.scatter(x,y)
#用array_like来确定条形图的坐标
bins=np.arange(-lim,lim+bin_width,bin_width)
axHistX.hist(x,bins=bins)
axHistY.hist(y,bins=bins,orientation='horizontal')
plt.show()

matplotlib查漏补缺

别家的好博文

subplot和subplots的区别

subplot和subplots的区别
可以看出来两者都可以实现画子图功能,只不过subplots帮我们把画板规划好了,返回一个坐标数组对象,而subplot每次只能返回一个坐标对象,subplots可以直接指定画板的大小。

未经允许不得转载:作者:1187-吴同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《matplotlib查漏补缺》 发布于2021-02-09

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录