数据分析day02

数据分析DAY02

matplotlib概述

matplotlib是python的一个绘图库。使用它可以很方便的绘制出版质量级别的图形。

matplotlib的基本功能

  1. 基本绘图
    1. 设置线型、线宽、颜色
    2. 设置坐标轴范围及刻度
    3. 设置坐标轴属性
    4. 图例
    5. 绘制特殊点
    6. 备注
  2. 高级图形绘制
    1. 绘制子图
    2. 刻度定位器、刻度网格线
    3. 半对数坐标
    4. 散点图
    5. 填充图
    6. 条形图、饼状图
    7. 等高线图
    8. 热成像图
    9. 极坐标系
    10. 三维曲面
    11. 简单动画

matplotlib基本功能详解

基本绘图

绘图核心API

绘制一条线:

import numpy as np
import matplotlib.pyplot as mp
# xarray: x坐标值数组
# yarray: y坐标值数组
mp.plot(xarray, yarray)
# 显示图像
mp.show()

绘制水平线与垂直线:

import matplotlib.pyplot as mp
# 绘制垂直线 给出x坐标值,给出y的范围即可
mp.vlines(val, ymin, ymax)
# 绘制水平线 给出y坐标值,给出x的范围即可
mp.hlines(val, xmin, xmax)

案例:绘制一条正弦曲线

# 从-π ~ π拆1000个点
x = np.linspace(-np.pi, np.pi, 1000)
sinx = np.sin(x)
# 绘制[-π, π]的1/2*cos(x)曲线
cosx = np.cos(x) / 2

mp.plot(x, sinx)
mp.plot(x, cosx)
mp.show()
线型、线宽、颜色
# linestyle: 线型  "-"  "--"  ":" 
# linewidth: 线宽
# color: 颜色  
#    常见颜色的英文单词  red  blue  green...
#    常见英文单词的首字母  r   b ..
#    #abcdab 
#    (1, 1, 1)  或  (0.8, 0.6, 1, 0.5)
# alpha: 透明度
mp.plot(x, y, linestyle='', linewidth=1, color='', alpha=0.5)
设置坐标刻度

把横坐标的刻度显示为 -π, -π/2, 0, π/2, π

# x_val_list: x轴刻度值列表
# x_text_list: x轴相应值的刻度文本列表
mp.xticks(x_val_list, x_text_list)
# y_val_list: y轴刻度值列表
# y_text_list: y轴相应值的刻度文本列表
mp.yticks(y_val_list, y_text_list)

matplotlib支持的latex排版语法

r'$a^2 + b^2 = c^2$'  
r'$[a_1 + a_2 + ... + a_n]$'  
r'$\frac{\pi}{2}$'

a 2 + b 2 = c 2 [ a 1 + a 2 + . . . + a n ] π 2 a^2 + b^2 = c^2 \quad \quad [a_1 + a_2 + ... + a_n] \quad\quad \frac{\pi}{2} a2+b2=c2[a1+a2+...+an]2π

设置坐标轴
# 获取当前坐标轴  'left' 'right' 'top' 'bottom'
ax = mp.gca()
# 获取其中某一个坐标轴
ax_left = ax.spines['left']
# 设置坐标轴的位置
# type: 移动坐标轴的参照类型 一般为'data' (以数据坐标轴作参照)
# val: 参照值
ax_left.set_position((type, val))
# 设置坐标轴的颜色
# color: 颜色值   若为'none',则隐藏当前坐标轴
ax_left.set_color(color)
图例

显示两条曲线的图例。

# 在plot绘制曲线时,给出label描述当前曲线的标签。
mp.plot(....,  label='')
mp.legend(loc='best')
特殊点
# xarray, yarray 散点的坐标
mp.scatter(xarray, yarray, 
          marker='',	# 点型
          s=60,			# 大小
          edgecolor='',	# 边缘色
          facecolor='',	# 填充色
          zorder=3		# 绘制图层编号(越大越靠顶层)
)
备注

为特殊点添加备注。

mp.annotate(
	r'$....$', 					# 备注文本
    xycoords='data',			# 定位目标点使用的参照坐标系
    xy=(1, 2),					# 目标点的坐标
    textcoords='offset points',	# 定位文本位置使用的坐标系
    xytext=(10, -30),			# 备注文本的位置坐标
    fontsize=14,				# 字体大小
    arrowprops=dict()			# 箭头的样式
)
arrowprops=dict(
	arrowstyle='->',			# 箭头样式
    connectionstyle='angle3'	# 箭头连接线的样式
)
设置坐标轴的范围

通过设置坐标轴的范围区间,可以显示图像中的一部分内容。

# 设置x轴的可视区域
mp.xlim(x_min, x_max)
# 设置y轴的可视区域
mp.ylim(y_min, y_max)

matplotlib图像窗口高级操作

绘制两个窗口:

# title:窗口的标题
# figsize: 窗口的大小
# dpi:像素密度
# facecolor:图表的背景色
mp.figure('title', figsize=(4,3), dpi=120, facecolor='')
mp.show()

mp.ffigure方法可以创建一个新的窗口,但是如果新窗口的title已经被创建过了,那么就把该title的旧窗口置为当前窗口,以后的绘图操作,都将针对当前窗口生效。

设置当前窗口的参数

mp.title('title', fontsize=16)	# 设置图表标题
mp.xlabel('x', fontsize=12)		# x轴的描述文本
mp.ylabel('y', fontsize=12)		# y轴的描述文本
mp.tick_params(labelsize=8)		# 设置刻度参数
mp.grid(linestyle=':')			# 绘制网格线
mp.tight_layout()				# 紧凑布局
窗口子图

矩阵式布局

绘制矩阵式布局子图的API:

mp.figure('xx', ...)
# rows: 行数
# columns: 列数
# num: 子图编号 
mp.subplot(rows, columns, num)
mp.subplot(3, 3, 5)  # 把3行3列的5号图设置为当前绘图区域
mp.subplot(3, 3, 1)  # 把3行3列的1号图设置为当前绘图区域
mp.show()

案例:绘制九宫格

import matplotlib.pyplot as mp

mp.figure('Subplot', facecolor='lightgray')

for i in range(1, 10):
    mp.subplot(3, 3, i)
    # 在窗前绘图区域写文字
    mp.text(0.5, 0.5, i, size=36, alpha=0.8,
            ha='center', va='center')
    mp.xticks([])
    mp.yticks([])

mp.tight_layout()
mp.show()

网格式布局

网格式布局支持单元格的合并。

绘制网格式子图相关API:

import matplotlib.gridspec as mg
mp.figure(..)
# 创建GridSpec对象,(3行3列)
gs = mg.GridSpec(3, 3)
# 把GridSpec中第一行的前两列合并为一个子图
mp.subplot(gs[0, :2])
mp.show()

案例:

import matplotlib.pyplot as mp
import matplotlib.gridspec as mg

mp.figure('Grid', facecolor='lightgray')

gs = mg.GridSpec(3, 3)

mp.subplot(gs[0, :2])
mp.text(0.5, 0.5, 1, ha='center', va='center',
        size=36)
mp.xticks([])
mp.yticks([])

mp.subplot(gs[:2, 2])
mp.text(0.5, 0.5, 2, ha='center', va='center',
        size=36)
mp.xticks([])
mp.yticks([])

mp.subplot(gs[1, 1])
mp.text(0.5, 0.5, 3, ha='center', va='center',
        size=36)
mp.xticks([])
mp.yticks([])

mp.subplot(gs[1:, 0])
mp.text(0.5, 0.5, 4, ha='center', va='center',
        size=36)
mp.xticks([])
mp.yticks([])

mp.subplot(gs[2, 1:])
mp.text(0.5, 0.5, 5, ha='center', va='center',
        size=36)
mp.xticks([])
mp.yticks([])


mp.tight_layout()
mp.show()

自由布局

自由布局相关API:

mp.figure()
# 设置图表的位置,需要给出左下角点坐标与宽、高即可
# 0.03: 左下角点的横坐标
# 0.04: 左下角点的纵坐标
# 0.94: 图表的宽度
# 0.92: 图表的高度
mp.axes([0.03, 0.04, 0.94, 0.92])
mp.text(....)
mp.show()

案例:

import matplotlib.pyplot as mp

mp.figure('FlowLayou', facecolor='lightgray')
mp.axes([0.1, 0.2, 0.5, 0.3])
mp.text(0.5, 0.5, 1, ha='center',
        va='center', size=36)
mp.xticks([])
mp.yticks([])

mp.axes([0.2, 0.6, 0.5, 0.3])
mp.text(0.5, 0.5, 2, ha='center',
        va='center', size=36)
mp.xticks([])
mp.yticks([])

mp.show()
刻度定位器

设置坐标轴刻度定位器相关的API:

# 获取当前坐标轴
ax = mp.gca()
# 设置横轴的主刻度定位器为多点定位器,主刻度间隔为1
ax.xaxis.set_major_locator(mp.MultipleLocator(1))
# 设置横轴的次刻度定位器为NullLocator()(将不会显示次刻度)
ax.xaxis.set_minor_locator( mp.NullLocator() )

案例:

import numpy as np
import matplotlib.pyplot as mp

locators = ['mp.NullLocator()',
            'mp.MaxNLocator(nbins=6)',
            'mp.MultipleLocator(1)',
            'mp.AutoLocator()',
            'mp.FixedLocator(locs=[0,2.5,7.5,10])']

mp.figure('Locator', facecolor='lightgray')

for i in range(len(locators)):
    mp.subplot(len(locators), 1, i + 1)
    ax = mp.gca()
    ax.spines['left'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.spines['right'].set_color('none')
    mp.xlim(0, 10)
    mp.ylim(-1, 1)
    mp.yticks([])
    ax.spines['bottom'].set_position(('data', 0))
    # 设置x轴的主刻度定位器
    ax.xaxis.set_major_locator(eval(locators[i]))
    # 设置x轴的次刻度定位器
    ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))

mp.tight_layout()
mp.show()
刻度网格线
ax = mp.gca()
# 绘制刻度网格线
ax.grid(
	which='',	# 'major''minor' 绘制主刻度/次刻度网格线
    axis='',	# 'x'/'y'/'both' 绘制x轴/y轴的刻度网格线
    linewidth=1, 
    linestyle='',
    color='',
    alpha=0.5
)

案例:[1,10,100,1000,100,10,1]

import numpy as np
import matplotlib.pyplot as mp

y = np.array([1, 10, 100, 1000, 100, 10, 1])
mp.figure('GridLine', facecolor='lightgray')
mp.title('GridLine', fontsize=16)
mp.xlabel('x', fontsize=12)
mp.ylabel('y', fontsize=12)
mp.tick_params(labelsize=10)
# 设置刻度定位器与刻度网格线
ax = mp.gca()
ax.xaxis.set_major_locator(
    mp.MultipleLocator(1))
ax.xaxis.set_minor_locator(
    mp.MultipleLocator(0.1))
ax.yaxis.set_major_locator(
    mp.MultipleLocator(250))
ax.yaxis.set_minor_locator(
    mp.MultipleLocator(50))
# 设置x与y轴的主刻度网格线
ax.grid(which='major', axis='both',
        linewidth=0.75, linestyle='-',
        color='orange')
# 设置x与y轴的次刻度网格线
ax.grid(which='minor', axis='both',
        linewidth=0.25, linestyle='-',
        color='orange')


mp.plot(y, 'o-', c='dodgerblue', label='plot')
mp.legend()
mp.show()
半对数坐标轴

y轴将会以指数方式递增。

mp.figure()
# mp.plot()改为mp.semilogy()方法绘制曲线即可
mp.semilogy(x, y, .....)
mp.show()
散点图

numpy.random模块提供了normal函数用于产生符合正态分布的随机数。

n = 100
# 产生n个符合正态分布规律的随机数
# 172:期望
# 20:标准差(标准差越小,越集中;标准差越大,越分散)
x = np.random.normal(172, 20, n)
y = np.random.normal(65, 10, n)

绘制散点图的相关API:

mp.scatter(
    x, y,
    marker='',
    s=60,
    edgecolor='',
    facecolor='',
    zorder=3
)

案例:

import numpy as np
import matplotlib.pyplot as mp

n = 500
x = np.random.normal(172, 20, n)
y = np.random.normal(65, 10, n)

mp.figure('Students', facecolor='lightgray')
mp.title('Students List', fontsize=16)
mp.xlabel('Height', fontsize=14)
mp.ylabel('Weight', fontsize=14)
mp.tick_params(labelsize=12)
mp.grid(linestyle=':')
mp.scatter(x, y, marker='o', s=50,
           color='dodgerblue', alpha=0.5,
           zorder=3, label='Stduent')
mp.legend()
mp.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值