数据分析(二)

matplotlib概述

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

matplotlib基本功能

  基本绘图 (在二维平面坐标系中绘制连续的线)

  1.设置线型、线宽和颜色

import numpy as np
import matplotlib.pyplot as mp

# xarray: <序列> 水平坐标序列
# yarray: <序列> 垂直坐标序列
mp.plot(xarray, yarray)
#显示图表
mp.show()

  (1)绘画折线图,水平线/垂直线

import numpy as np
import matplotlib.pyplot as mp

# vertical 绘制垂直线
mp.vlines(vval, ymin, ymax)#列的位置,起点坐标y,终点坐标y
# horizotal 绘制水平线
mp.hlines(xval, xmin, xmax)#行的位置,起点坐标x,终点坐标x
#显示图表
mp.show()

 

#基本绘图

import numpy as np
import matplotlib.pyplot as mp

xarray = np.arange(8)
yarray = np.array([64,89,12,36,49,80,45,34])
#绘制折线图
mp.plot(xarray,yarray)
#绘制水平线
mp.hlines(40,1,7)
# mp.hlines([10,20,30,50],1,7)
mp.hlines([10,20,30,50],[1,2,4,5],[7,5,4,3])#行的位置  起点位置 终点位置
#绘制垂直线
mp.vlines(4,20,80)
mp.show()

  (2)画一条正弦曲线,余弦曲线

#linestyle: 线型   "-"  "--"  ":"  ".-"
#linewidth: 线宽
    #    数字
#color: <关键字参数> 颜色
    #    英文颜色单词 或 常见颜色英文单词首字母 或 #495434 或 (1,1,1) 或 (1,1,1,1)
#alpha: <关键字参数> 透明度
    #    浮点数值
mp.plot(xarray, yarray, linestyle='', linewidth=1, color='', alpha=0.5)

 

import numpy as np
import matplotlib.pyplot as mp

# 绘制正弦曲线  y=sin(x)
x = np.linspace(-np.pi, np.pi, 1000)
sinx = np.sin(x)
# 绘制余弦曲线  y=cos(x) / 2
cosx = np.cos(x) / 2

mp.plot(x, sinx)
mp.plot(x, cosx)

mp.show()

  2.设置坐标轴范围

#x_limt_min:    <float> x轴范围最小值
#x_limit_max:    <float> x轴范围最大值
mp.xlim(x_limt_min, x_limit_max)
#y_limt_min:    <float> y轴范围最小值
#y_limit_max:    <float> y轴范围最大值
mp.ylim(y_limt_min, y_limit_max)

 

import numpy as np
import matplotlib.pyplot as mp

# 绘制正弦曲线  y=sin(x)
x = np.linspace(-np.pi, np.pi, 1000)
sinx = np.sin(x)
# 绘制余弦曲线  y=cos(x) / 2
cosx = np.cos(x) / 2

#设置可视区间
mp.xlim(0, np.pi+0.1)
mp.ylim(0, 1+0.1)

mp.plot(x, sinx)
mp.plot(x, cosx)

mp.show()

  3.设置坐标刻度

#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 )

  案例:把横坐标的刻度显示为:0, π/2, π, 3π/2, 2π

import numpy as np
import matplotlib.pyplot as mp

# 绘制正弦曲线  y=sin(x)
x = np.linspace(-np.pi, np.pi, 1000)
sinx = np.sin(x)
# 绘制余弦曲线  y=cos(x) / 2
cosx = np.cos(x) / 2

# 设置刻度文本
vals = [-np.pi, -np.pi/2, 0, np.pi/2, np.pi]
texts = [r'$-\pi$', r'$-\frac{\pi}{2}$', 0,
         r'$\frac{\pi}{2}$', r'$\pi$']
mp.xticks(vals, texts)
mp.yticks([-1.0, -0.5, 0.5, 1])

mp.plot(x, sinx)
mp.plot(x, cosx)

mp.show()

  4.设置坐标轴

  坐标轴名:left / right / bottom / top

# 获取当前坐标轴字典,{'left':左轴,'right':右轴,'bottom':下轴,'top':上轴 }
ax = mp.gca()
# 获取其中某个坐标轴
axis = ax.spines['坐标轴名']
# 设置坐标轴的位置。 该方法需要传入2个元素的元组作为参数
# type: <str> 移动坐标轴的参照类型  一般为'data' (以数据的值作为移动参照值)
# val:  参照值
axis.set_position(('data', val))
# 设置坐标轴的颜色
# color: <str> 颜色值字符串
axis.set_color(color)

  案例:设置坐标轴至中心。

#设置坐标轴
ax = mp.gca()
axis_b = ax.spines['bottom']
axis_b.set_position(('data', 0))
axis_l = ax.spines['left']
axis_l.set_position(('data', 0))
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
import numpy as np
import matplotlib.pyplot as mp

# 绘制正弦曲线  y=sin(x)
x = np.linspace(-np.pi, np.pi, 1000)
sinx = np.sin(x)
# 绘制余弦曲线  y=cos(x) / 2
cosx = np.cos(x) / 2

# 设置刻度文本
vals = [-np.pi, -np.pi/2, 0, np.pi/2, np.pi]
texts = [r'$-\pi$', r'$-\frac{\pi}{2}$', 0,
         r'$\frac{\pi}{2}$', r'$\pi$']
mp.xticks(vals, texts)
mp.yticks([-1.0, -0.5, 0.5, 1])

# 设置坐标轴(移动)
axis = mp.gca()
axis.spines['top'].set_color('none')
axis.spines['right'].set_color('none')
axis.spines['left'].set_position(('data', 0))
axis.spines['bottom'].set_position(('data', 0))

mp.plot(x, sinx)
mp.plot(x, cosx)

mp.show()

  5.图例

  显示两条曲线的图例,并测试loc属性。

# 再绘制曲线时定义曲线的label
# label: <关键字参数 str> 支持LaTex排版语法字符串
mp.plot(xarray, yarray ... label='', ...)
# 设置图例的位置
# loc: <关键字参数> 制定图例的显示位置 (若不设置loc,则显示默认位置)
#     ===============   =============
#    Location String   Location Code
#    ===============   =============
#    'best'            0
#    'upper right'     1
#    'upper left'      2
#    'lower left'      3
#    'lower right'     4
#    'right'           5
#    'center left'     6
#    'center right'    7
#    'lower center'    8
#    'upper center'    9
#    'center'          10
#    ===============   =============
mp.legend(loc='')
import numpy as np
import matplotlib.pyplot as mp

# 绘制正弦曲线  y=sin(x)
x = np.linspace(-np.pi, np.pi, 1000)
sinx = np.sin(x)
# 绘制余弦曲线  y=cos(x) / 2
cosx = np.cos(x) / 2

# 设置刻度文本
vals = [-np.pi, -np.pi/2, 0, np.pi/2, np.pi]
texts = [r'$-\pi$', r'$-\frac{\pi}{2}$', 0,
         r'$\frac{\pi}{2}$', r'$\pi$']
mp.xticks(vals, texts)
mp.yticks([-1.0, -0.5, 0.5, 1])

# 设置坐标轴(移动)
axis = mp.gca()
axis.spines['top'].set_color('none')
axis.spines['right'].set_color('none')
axis.spines['left'].set_position(('data', 0))
axis.spines['bottom'].set_position(('data', 0))

mp.plot(x, sinx, linestyle='--', linewidth=2,
    color='dodgerblue', alpha=0.8,
    label=r'$y=sin(x)$')
mp.plot(x, cosx, linestyle='-.', linewidth=2,
    color='orangered', alpha=0.8,
    label=r'$y=\frac{1}{2}cos(x)$')

mp.show()

  6.特殊点

# xarray: <序列> 所有需要标注点的水平坐标组成的序列
# yarray: <序列> 所有需要标注点的垂直坐标组成的序列
mp.scatter(xarray, yarray, 
           marker='',         #点型 ~ matplotlib.markers
           s=50,             #大小
           edgecolor='',     #边缘色
           facecolor='',    #填充色
           zorder=3            #绘制图层编号 (编号越大,图层越靠上)

  案例:绘制当x=π/2时两条曲线上的特殊点。

import numpy as np
import matplotlib.pyplot as mp

# 绘制正弦曲线  y=sin(x)
x = np.linspace(-np.pi, np.pi, 1000)
sinx = np.sin(x)
# 绘制余弦曲线  y=cos(x) / 2
cosx = np.cos(x) / 2

# 设置刻度文本
vals = [-np.pi, -np.pi/2, 0, np.pi/2, np.pi]
texts = [r'$-\pi$', r'$-\frac{\pi}{2}$', 0,
         r'$\frac{\pi}{2}$', r'$\pi$']
mp.xticks(vals, texts)
mp.yticks([-1.0, -0.5, 0.5, 1])

# 设置坐标轴(移动)
axis = mp.gca()
axis.spines['top'].set_color('none')
axis.spines['right'].set_color('none')
axis.spines['left'].set_position(('data', 0))
axis.spines['bottom'].set_position(('data', 0))

mp.plot(x, sinx, linestyle='--', linewidth=2,
    color='dodgerblue', alpha=0.8,
    label=r'$y=sin(x)$')
mp.plot(x, cosx, linestyle='-.', linewidth=2,
    color='orangered', alpha=0.8,
    label=r'$y=\frac{1}{2}cos(x)$')

# 绘制特殊点
xs = [np.pi/2, np.pi/2]
ys = [1, 0]
mp.scatter(xs, ys, marker='o', edgecolor='red',
    facecolor='green', s=100, label='Points',
    zorder=3)

mp.show()

  7.备注

# 在图表中为某个点添加备注。包含备注文本,备注箭头等图像的设置。
mp.annotate(
    r'$\frac{\pi}{2}$',            #备注中显示的文本内容
    xycoords='data',            #备注目标点所使用的坐标系(data表示数据坐标系)
    xy=(x, y),                     #备注目标点的坐标
    textcoords='offset points',    #备注文本所使用的坐标系(offset points表示参照点的偏移坐标系)
    xytext=(x, y),                #备注文本的坐标
    fontsize=14,                #备注文本的字体大小
    arrowprops=dict()            #使用字典定义文本指向目标点的箭头样式
)

  arrowprops参数使用字典定义指向目标点的箭头样式

#arrowprops字典参数的常用key
arrowprops=dict(
    arrowstyle='',        #定义箭头样式
    connectionstyle=''    #定义连接线的样式
)

  箭头样式(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
============   =============================================

  案例:为在某条曲线上的点添加备注,指明函数方程与值。

import numpy as np
import matplotlib.pyplot as mp

# 绘制正弦曲线  y=sin(x)
x = np.linspace(-np.pi, np.pi, 1000)
sinx = np.sin(x)
# 绘制余弦曲线  y=cos(x) / 2
cosx = np.cos(x) / 2

#设置可视区间
# mp.xlim(0, np.pi+0.1)
# mp.ylim(0, 1+0.1)

# 设置刻度文本
vals = [-np.pi, -np.pi/2, 0, np.pi/2, np.pi]
texts = [r'$-\pi$', r'$-\frac{\pi}{2}$', 0,
         r'$\frac{\pi}{2}$', r'$\pi$']
mp.xticks(vals, texts)
mp.yticks([-1.0, -0.5, 0.5, 1])
# 移动坐标轴
axis = mp.gca()
axis.spines['top'].set_color('none')
axis.spines['right'].set_color('none')
axis.spines['left'].set_position(('data', 0))
axis.spines['bottom'].set_position(('data', 0))

mp.plot(x, sinx, linestyle='--', linewidth=2,
    color='dodgerblue', alpha=0.8,
    label=r'$y=sin(x)$')
mp.plot(x, cosx, linestyle='-.', linewidth=2,
    color='orangered', alpha=0.8,
    label=r'$y=\frac{1}{2}cos(x)$')

# 绘制特殊点
xs = [np.pi/2, np.pi/2]
ys = [1, 0]
mp.scatter(xs, ys, marker='o', edgecolor='red',
    facecolor='green', s=100, label='Points',
    zorder=3)

# 添加备注信息
mp.annotate(r'$[\frac{\pi}{2},1]$',
            xycoords='data', xy=(np.pi / 2, 1),
            textcoords='offset points', xytext=(30, 30),
            fontsize=14,
            arrowprops=dict(
              arrowstyle='->',
              connectionstyle='angle3'))
mp.annotate(r'$[\frac{\pi}{2},0]$',  # 备注的内容
            xycoords='data',  # 会让你的箭头指向这个点
            xy=(np.pi / 2, 0),  # 备注的坐标点
            textcoords='offset points',  # 你传进去的那个字符串会基于你第一步画出来的那个点的基础上x轴上减30,y轴上减30的位置进行打印。
            xytext=(-60, -60),  # 离原坐标的距离
            fontsize=14,  # 备注字的大小
            arrowprops=dict(
              arrowstyle='->',  # 描绘了箭头的样式
              connectionstyle='angle3'))  # 就是描绘箭头的样式的,例如箭头的一个弧度之类的

mp.legend(loc='best')
mp.show()

  1. 图形对象(图形窗口)

    1. 子图

    2. 刻度定位器

    3. 刻度网格线

    4. 半对数坐标

    5. 散点图

    6. 填充

    7. 条形图

    8. 饼图

    9. 等高线图

    10. 热成像图

    11. 极坐标系

    12. 三维曲面

    13. 简单动画

猜你喜欢

转载自www.cnblogs.com/maplethefox/p/11448701.html