数据科学包15、matplotlib详细介绍

matplotlib详细介绍

1.颜色和样式

1)如何调整颜色

八种内建默认颜色缩写
        b: blue
        g: green
        r: red
        c: cyan
        m: magenta
        y: yellow
        k: black
        w: white
其它颜色表示方法
灰色阴影
html 十六进制
RGB元组
# 颜色
import numpy as np
import matplotlib.pyplot as plt

# 8种默认缩写
y=np.arange(1,5)
plt.plot(y,color='g')
# 灰色阴影
plt.plot(y+1,color='1.5')
# html 16进制,代码可以在网上直接搜
plt.plot(y+2,color='#FF00FF')
# RGB元祖
plt.plot(y+3,color=(0.1,0.2,0.3))
plt.show()

在这里插入图片描述

2)如何调整点型

23种点形状。注意,不同点形状默认使用不同颜色。
 ”.”  point
”,”  pixel
“o”  circle
“v”  triangle_down
“^”  triangle_up
“<”  triangle_left
“>”  triangle_right
“1”  tri_down
“2”  tri_up
“3”  tri_left
“4”  tri_right
“8”  octagon
“s”  square
“p”  pentagon
“*”  star
“h”  hexagon1
“H”  hexagon2
“+”  plus
“x”  x
“D”  diamond
“d”  thin_diamond
“|”  vline
“_”  hline
 

# 点样式
import numpy as np
import matplotlib.pyplot as plt

y=np.arange(1,5)

# 指定marker,默认会画出线段;不指定marker,默认只画出点
# 当在一个图中绘制多条线段时,matplotlib会默认采用不同的的颜色
plt.plot(y,marker='o')
# 指定marker的时候会画出线
plt.plot(y+1,marker='D')
plt.plot(y+2,'^')
plt.plot(y+3,'s')
plt.plot(y+4,'p')
plt.plot(y+5,'x')

plt.show()

在这里插入图片描述

3)如何调整线型

四种线型:
           -  实线
           -- 虚线
           -. 点划线
           :  点线
# 线样式
import numpy as np
import matplotlib.pyplot as plt

y=np.arange(1,5)
# 4种线的样式
plt.plot(y,'--')
plt.plot(y+1,'-.')
plt.plot(y+2,':')
plt.plot(y+3,'-')

plt.show()

在这里插入图片描述

4)样式字符串

可以将颜色,点型,线型写成一个字符串。如:
cx--
mo:
kp-
# 样式字符串
import numpy as np
import matplotlib.pyplot as plt

y=np.arange(1,5)
# 将颜色、线型、点型写成一个字符串
plt.plot(y,'cx--')
plt.plot(y+1,'kp:')
plt.plot(y+2,'mo-.')

plt.show()

在这里插入图片描述

2.三种方式

三种方式简介

  • pyplot :经典高层封装,到目前为止,我们所用的都是pyplot
  • pylab: 将Matplotlib 和 NumPy 合并的模块,模拟Matlab的编程环境
  • 面向对象的方式:Matplotlib的精髓,更基础和底层的方式
    三种方式优劣
  • pyplot :简单易用。交互使用时方便,可以根据命令实时作图。但底层定制能力不足。
  • pylab: 完全封装,环境最接近Matlab。不推荐使用。
  • 面向对象(Object-Oriented)的方式:接近Matplotlib基础和底层的方式。难度稍大。但定制能力强。而且是Matplotlib的精髓。
  • 总结:实战中推荐,根据需求,综合使用 pyplot和OO的方式,显示导入numpy
  • 常用模块导入代码:
    import matplotlib.pyplot as plt
    import numpy as np

1)pylab方式

#pylab方式  不推荐
from pylab import *
x=arange(0,10,1)
y=randn(len(x))
plot(x,y)
title('random numbers')
show()

2)pyplot方式

# pyplot方式
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(0,10,1)
y=np.random.randn(len(x))
plt.plot(x,y)
plt.title('pyplot')
plt.show()

3)面向对象方式

# 面向对象方式
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(0,10,1)
y=np.random.randn(len(x))

# 生成一个对象(figure对象)
fig = plt.figure()
# 生成一个坐标轴对象
ax = fig.add_subplot(111)
l, = plt.plot(x,y)
# 对标题命名
t = ax.set_title('object oriented')

plt.show()

在这里插入图片描述

3.子图-subplot

在同一张图上画多个子图

  • Matplotlib对象简介
    • FigureCanvas
    • Figure
    • Axes

实践

  • fig=plt.figure()

    • Figure实例
    • 可以添加Axes实例
  • ax=fig.add_subplot(111)

    • 返回Axes实例
    • 参数一,子图总行数
    • 参数二,子图总列数
    • 参数三,子图位置
    • 在Figure上添加Axes的常用方法
# 面向对象的方式画子图
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(1,100)

fig = plt.figure()
# 221表示子图总行数为2,子图总列数为2,子图在第一个位置
ax1 = fig.add_subplot(221)
ax1.plot(x,x)

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

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

ax4 = fig.add_subplot(224)
ax4.plot(x,np.log(x))

plt.show()

在这里插入图片描述

# pyplot画子图
import matplotlib.pyplot as plt
import numpy as np

x=np.arange(1,100)

plt.subplot(221)
plt.plot(x,x)

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

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

plt.subplot(224)
plt.plot(x,np.log(x))

plt.show()

在这里插入图片描述

4.多图-可以创建多个Figure

同一时间产生多张图

# 多图
import matplotlib.pyplot as plt

fig1=plt.figure()
ax1=fig1.add_subplot(111)
ax1.plot([1,2,3],[3,2,1])

fig2=plt.figure()
ax2=fig2.add_subplot(111)
ax2.plot([1,2,3],[1,2,3])

plt.show()

在这里插入图片描述

5.网格

图以网格为背景

# pyplot方式---在交互里面用的很多
import numpy as np
import matplotlib.pyplot as plt
y=np.arange(1,5)

plt.plot(y,y*2)
# 控制打开关闭网格,
# plt.grid(True)

# color控制网格的颜色,控制网格的线条宽度,控制网格线型
plt.grid(True,color='r',linestyle='-.',linewidth='2')

plt.show()

在这里插入图片描述

# 用面向对象的方式绘制网格
import matplotlib.pyplot as plt
import numpy as np

x=np.arange(0,10,1)
y=np.random.randn(len(x))

fig=plt.figure()
ax=fig.add_subplot(111)
l,=plt.plot(x,y)
# 网格
ax.grid(True,color='r',linestyle='-.',linewidth='2')

plt.show()

在这里插入图片描述

6.图例

# 图例--交互式
import matplotlib.pyplot as plt
import numpy as np

x=np.arange(1,11,1)
y=x*x

plt.plot(x,x*2,label='Normal')
plt.plot(x,x*3,label='Fast')
plt.plot(x,x*4,label='Faster')

# legend函数---让图例显示在图中
# 参数loc来控制图例的位置,0-自适应,1-右上角,2-左上角,3-左下角,4-右下角
# 参数ncol可以是图例扁平化,ncol等于几表明有几列
plt.legend(loc=2,ncol=2)

plt.show()

在这里插入图片描述

# 图例-面向对象--第一种方式
import matplotlib.pyplot as plt
import numpy as np

x=np.arange(0,10,1)
y=np.random.randn(len(x))

fig=plt.figure()
ax=fig.add_subplot(111)

# 第一种方式
l,=plt.plot(x,y)
ax.legend(['ax legend'])

plt.show()

在这里插入图片描述

# 图例-面向对象--第二种方式
import matplotlib.pyplot as plt
import numpy as np

x=np.arange(0,10,1)
y=np.random.randn(len(x))

fig=plt.figure()
ax=fig.add_subplot(111)

line, =plt.plot(x,y,label='Inline label')
plt.show()

在这里插入图片描述

# 图例-面向对象---第三种方式
import matplotlib.pyplot as plt
import numpy as np

x=np.arange(0,10,1)
y=np.random.randn(len(x))

fig=plt.figure()
ax=fig.add_subplot(111)

line, = plt.plot(x,y)
line.set_label('label via method')
ax.legend()

plt.show()

在这里插入图片描述

7.坐标轴范围的调整

# 显示调整x轴、y轴的最大坐标
plt.axis()
plt.axis([-5,5,-10,10])
# 显示调整x轴
plt.xlim()
plt.xlim([-10,10])
plt.xlim(xmin=-5)
# 显示调整y轴
plt.ylim()
# 坐标轴范围调整
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-10,11,1)
plt.plot(x,x)
# 显示调整x轴、y轴的最大坐标
plt.axis([-20,20,-20,10])
plt.show()

8.坐标轴刻度的调整

# 坐标轴刻度的调整
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(1,11,1)
# 获取当前图形的坐标轴
ax = plt.gca()
# 函数 locator_params调整坐标轴刻度
# 参数nbins表示坐标轴有多少格
# 第一个参数x或者y可以指定调整,未指定的默认;没有的话,x与y都调整
ax.locator_params('x',nbins=20)
plt.show()
# 日期的调整
# 坐标轴刻度的调整-日期调整
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
import datetime

fig = plt.figure()

start = datetime.datetime(2015,1,1)
stop = datetime.datetime(2016,1,1)
delta = datetime.timedelta(days=1)

dates = mpl.dates.drange(start,stop,delta)

y = np.random.rand(len(dates))

ax = plt.gca()

ax.plot_date(dates,y,linestyle='-',marker='')
# 格式化日期
date_format = mpl.dates.DateFormatter('%Y-%m')
ax.xaxis.set_major_formatter(date_format)
# 将日期的大小根据图形的大小自适义
fig.autofmt_xdate()

plt.show()

在这里插入图片描述

9.添加坐标轴-双坐标轴

# 添加坐标轴
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(2,20,1)
y1 = x*x
y2 = np.log(x)

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot(x,y1)
ax1.set_ylabel('Y1')
# 添加坐标轴
ax2 = ax1.twinx()
ax2.plot(x,y2,'r')
ax2.set_ylabel('Y2')

ax1.set_xlabel('Compare Y1 and Y2')

plt.show()

在这里插入图片描述

10.注释

在一个图形上画注释的符号,在某一个地方给予信息提示

# 注释
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-10,11,1)
y = x*x

plt.plot(x,y)
# 注释使用annotate函数
# 第一个参数:注释的内容
# 第二个参数:xy填写箭头的坐标
# 第三个参数:xytext填写注释内容的坐标
# 第四个参数arrowprops定义注释箭头信息,其中facecolor表示箭头颜色,frac表示箭头比例
# headwidth定义箭头的宽度,width表示箭身的宽度
plt.annotate('this is the bottom',xy=(0,1),xytext=(0,20),
             arrowprops=dict(facecolor='r',frac=0.2,headwidth=20,width=10))
plt.show() 

在这里插入图片描述

11.文字-图形中纯粹的文字标注

# 在图中生成一段文字
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-10,11,1)
y = x*x

plt.plot(x,y)
# 使用text函数在图中生成一段文字
# 前两个参数是文字起始点的横纵坐标,第三个参数是文字
# 第四个参数是family表示文字字体,
# size参数定义字体的大小,color定义颜色,style定义字体格式,weight定义字体的粗细
# bbox(箱体)定义一个框用来框住字体,里面有facecolor参数定义箱体颜色,alpha定义透明度
plt.text(-3,30,'function:y=x*x',family='fantasy',size=20,color='g',
         style='italic',weight=500,bbox=dict(facecolor='r',alpha=0.2))
plt.show()

在这里插入图片描述

12.Tex公式

matplotlib自带mathtext引擎,作为开始和结束符如 作为开始和结束符如作为开始和结束符如 y=x*x$
画出数学公式

# Tex公式
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
# 设置x与y坐标轴
ax.set_xlim([1,7])
ax.set_ylim([1,5])

ax.text(2,4,r"$ \alpha_i \beta_j \pi \lambda \omega $",size=25)
ax.text(4,4,r"$ \sin(0)=\cos(\frac{\pi}{2}) $",size=25)
ax.text(2,2,r"$ \lim_{x \rightarrow y} \frac{1}{x^3} $",size=25)
ax.text(4,2,r"$ \sqrt[4]{x}=\sqrt{y} $",size=25)
plt.show()

在这里插入图片描述

13.区域填充

给一块区域上色
函数:fill、fill_between

# 区域填充
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,5*np.pi,1000)
y1 = np.sin(x)
y2 = np.sin(2*x)
# 填充图形与x轴相交的部分
plt.fill(x,y1,'b',alpha=0.3)
plt.fill(x,y2,'r',alpha=0.3)

plt.show()

在这里插入图片描述

# 区域填充--面向对象
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,5*np.pi,1000)
y1 = np.sin(x)
y2 = np.sin(2*x)

fig = plt.figure()
ax = plt.gca()
ax.plot(x,y1,color='r')
ax.plot(x,y2,color='black')
# 根据条件分别填充where
# interpolate=True表示当x离散的厉害时,对空白部分自动填充
ax.fill_between(x,y1,y2,where=y1>=y2,facecolor='y',interpolate=True)
ax.fill_between(x,y1,y2,where=y1<y2,facecolor='g',interpolate=True)

plt.show()

在这里插入图片描述

14.形状-画填充好的形状

# 形状
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

fig,ax = plt.subplots()
xy1 = np.array([0.2,0.2])
xy2 = np.array([0.2,0.8])
xy3 = np.array([0.8,0.2])
xy4 = np.array([0.8,0.8])
# 画圆,圆心-半径
circle = mpatches.Circle(xy1,0.05)
# 把圆添加到画幕上
ax.add_patch(circle)

# 画矩形 左下角点的坐标-长-宽-颜色
rect = mpatches.Rectangle(xy2,0.2,0.1,color='r')
ax.add_patch(rect)

# 画多边形 图形中心-边数-中心到顶点长度-颜色
polygon = mpatches.RegularPolygon(xy3,5,0.1,color='g')
ax.add_patch(polygon)

# 画椭圆形 圆心-长直径-短直径-颜色
ellipse = mpatches.Ellipse(xy4,0.4,0.2,color='y')
ax.add_patch(ellipse)
# 调整x轴y轴比例
plt.axis('equal')
# 网格
plt.grid()

plt.show()

在这里插入图片描述

15.样式-美化

使用自带样式进行美化

# 样式-美化
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
# 生成两行两列的子图
fig,axes = plt.subplots(ncols=2,nrows=2)
# 将四个子图的坐标轴分别fu为四个对象
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)
# 循环颜色的数目,axes.prop_cycle来控制颜色循环
ncolors = len(plt.rcParams['axes.prop_cycle'])
# 间距
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, color=mpl.rcParams['axes.prop_cycle'].by_key()['color'][0])
ax3.bar(x + width, y2, width, color=mpl.rcParams['axes.prop_cycle'].by_key()['color'][1])
ax3.bar(x + 2 * width, y3, width, color=mpl.rcParams['axes.prop_cycle'].by_key()['color'][2])

#添加圆形
print(plt.rcParams['axes.prop_cycle'])
# python其实提供了内置的enumerate函数可以同时获得索引和值
# np.random.normal(size,loc,scale)
for i, xcolor in enumerate(plt.rcParams['axes.prop_cycle']):
    xy = np.random.normal(size=2)
    ax4.add_patch(plt.Circle(xy, radius=0.3, color=xcolor['color']))
# x、y调成对称
ax4.axis('equal')

plt.show()

在这里插入图片描述

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np


# 1) 默认样式
def DrwaFigures():
    # 绘制散点
    fig, ax = plt.subplots(ncols=2, nrows=2)
    ax1, ax2, ax3, ax4 = ax.ravel()
    x, y = np.random.normal(size=(2, 100))
    ax1.plot(x, y, 'o')

    # 绘制10条不同颜色线段
    x = np.arange(0, 10)
    y = np.arange(0, 10)
    ncolors = len(mpl.rcParams['axes.prop_cycle'])  # 显示颜色种类
    shift = np.linspace(0, 10, ncolors)
    for s in shift:
        ax2.plot(x, y + s, '-')

    # 绘制柱状图-分别使用默认的0-1-2号颜色
    x = np.arange(5)
    y1, y2, y3 = np.random.randint(1, 25, size=(3, 5))
    width = 0.25
    # print(mpl.rcParams['axes.prop_cycle'])
    ax3.bar(x, y1, width, color=mpl.rcParams['axes.prop_cycle'].by_key()['color'][0])
    ax3.bar(x + width, y2, width, color=mpl.rcParams['axes.prop_cycle'].by_key()['color'][1])
    ax3.bar(x + 2 * width, y3, width, color=mpl.rcParams['axes.prop_cycle'].by_key()['color'][2])

    # 添加圆形
    print(plt.rcParams['axes.prop_cycle'])
    for i, xcolor in enumerate(plt.rcParams['axes.prop_cycle']):
        xy = np.random.normal(size=2)
        ax4.add_patch(plt.Circle(xy, radius=0.3, color=xcolor['color']))
    ax4.axis('equal')
    plt.show()


if __name__ == '__main__':
    DrwaFigures()

16.极坐标

绘制以极坐标系为坐标轴的图形(角度和半径)

# 极坐标
import numpy as np
import matplotlib.pyplot as plt
# 半径
r = np.arange(1,6,1)
# 角度
theta = [0,np.pi/2,np.pi,3*np.pi/2,2*np.pi]
# projection='polar'表示将坐标投影为极坐标
ax = plt.subplot(111, projection = 'polar')

ax.plot(theta,r,color='r',linewidth=3)
# 网格
ax.grid(True)

plt.show()

在这里插入图片描述

# 极坐标
import numpy as np
import matplotlib.pyplot as plt
# 半径
# np.empty()根据给定的维度和数值类型返回一个新的数组,其元素不进行初始化。
r = np.empty(5)
r.fill(5)
# 角度
theta = [0,np.pi/2,np.pi,3*np.pi/2,2*np.pi]
# projection='polar'表示将坐标投影为极坐标
ax = plt.subplot(111, projection = 'polar')

ax.plot(theta,r,color='r',linewidth=3)
# 网格
ax.grid(True)

plt.show()

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值