python基础笔记(三)_Matplotlib基础语法

图表绘制工具:Matplotlib

概念

  • 一个python版的matlab绘图接口
  • 以2D为主
  • 支持python、numpy、pandas基本数据结构
  • 有较丰富的图表库

图表窗口

  • plt.show() : 直接生成图表
  • % matplotlib inline : 魔法函数(常用)==》魔法函数,不需要 plt.show() 
  • % matplotlib notebook : 弹出可交互的matplotlib窗口
  • % matplotlib qt5 : 弹出matplotlib控制台

图表基本元素

  • figsize:创建图表窗口,设置窗口大小
  • plt.title('test'):设置图名
  • plt.xlabel('Plot Number'):x轴标签
  • plt.ylabel('Important var'):y轴标签
  • plt.legend(loc = 'best'):显示图例,loc表示位置;loc : 数字从0到10 loc = 0-10
  • plt.xlim([0,12]):x轴边界
  • plt.ylim([0,1.5]):y轴边界
  • plt.xticks(range(10)):设置x刻度
  • plt.yticks([0,0.2,0.4,0.6,0.8,1.0,1.2]):设置y刻度
  • fig.set_xticklabels('%.1f' %i for i in range(10)):x轴刻度标签
  • fig.set_yticklabels('%.2f' %i for i in [0,0.2,0.4,0.6,0.8,1.0,1.2]):y轴刻度标签
  • 网格设置 :网格设置 : plt.grid(True,color='gray',linewidth='0.5',axis='both')
    • True : 显示网格
    • linestyle : 线型
    • color : 颜色
    • linewidth : 宽度
    • axis:x,y,both : 显示x/y/两者的格网
  • 显示刻度 : plt.tick_params(bottom='on',top='off',left='on',right='off')  
  • 刻度的方向 : in/out/inout
    • matplotlib.rcParams['xtick.direction'] = 'in'
    • matplotlib.rcParams['ytick.direction'] = 'inout'
  • 坐标轴可见性
    • plt.axis('off') : 关闭坐标轴
    • frame.axes.get_xaxis().set_visible(False) : x轴不可见(True/False)
    • frame.axes.get_yaxis().set_visible(False) : y轴不可见(True/False)

图表样式参数

  • linestyle参数
    • 表示整体线型的样式
      • '-'       solid line style
      • '--'      dashed line style
      • '-.'      dash-dot line style
      • ':'       dotted line style
  • marker参数
    • 表示具体的单个单个点的样式
  • color参数
    • color
      • red-r
      • green-g
      • black-k
      • blue-b
      • yellow-y
    • colormap : 色板
      • 各类颜色首字母大写,尾部加s
      • 春夏秋冬海洋,字母小写
      • 各类色板后加 _r,表示颜色反转
  • style参数
    • 可以包含linestyle,marker,color
    • 三者样式写于一个字符串内
  • 整体风格样式
    • 导入模块 ; import matplotlib.style as psl
    • 查看样式列表 : print(plt.style.available)
    • 一旦选用样式后,所有图表都会有样式,重启后方可关掉

刻度、注解和图表输出

  • 刻度
    • 导入模块:from matplotlib.ticker import MultipleLocator, FormatStrFormatter
    • ax = plt.subplot(111) #注意:一般都在ax中设置,不在plot中设置
    • 刻度参数设置
      • 将x主刻度标签设置为10的倍数 : xmajorLocator = MultipleLocator(10)
      • 设置x轴标签文本的格式 : xmajorFormatter = FormatStrFormatter('%.0f')
      • 将x轴次刻度标签设置为5的倍数 : xminorLocator = MultipleLocator(5)
      • 将y轴主刻度标签设置为0.5的倍数 : ymajorLocator = MultipleLocator(0.5)
      • 设置y轴标签文本的格式 : ymajorFormatter = FormatStrFormatter('%.1f')
      • 将此y轴次刻度标签设置为0.1的倍数 : yminorLocator = MultipleLocator(0.1)
    • 设置主次刻度
      • 设置x轴主刻度 : ax.xaxis.set_major_locator(xmajorLocator)
      • 设置x轴标签文本格式 : ax.xaxis.set_major_formatter(xmajorFormatter)
      • 设置x轴次刻度 : ax.xaxis.set_minor_locator(xminorLocator)
      • 设置y轴主刻度 : ax.yaxis.set_major_locator(ymajorLocator)
      • 设置y轴标签文本格式 : ax.yaxis.set_major_formatter(ymajorFormatter)
      • 设置y轴次刻度 : ax.yaxis.set_minor_locator(yminorLocator)
    • 使用主次刻度
      • x坐标轴的网格使用主刻度 : ax.xaxis.grid(True, which='both')
      • y坐标轴的网格使用次刻度 : ax.yaxis.grid(True, which='minor')
    • 删除坐标轴刻度显示
      • ax.xaxis.set_major_formatter(plt.NullFormatter())
      • ax.yaxis.set_major_locator(plt.NullLocator())
  • 注解
    • plt.text(4,1,'hahaha',fontsize=10)
    • 注解 → 横坐标,纵坐标,注解字符串
  • 图表输出
    • plt.savefig('pic.png',dpi=800,bbox_inches = 'tight',facecolor = 'r',edgecolor = 'r')
    • dpi表示分辨率,越大越清晰;'tight',表示删除多余空白;facecolor 主体颜色;edgecolor 轮廓颜色

子图

  • 概念
    • 在matplotlib中,整个图像为一个Figure对象
    • 在Figure对象中可以包含一个或者多个Axes对象
    • 每个Axes(ax)对象都是一个拥有自己坐标系统的绘图区域
  • 创建及调整
    • fig1 = plt.figure(num=1,figsize=(8,6)) 绘图对象;num 表示图表序号
    • 创建方法一:先建立子图然后填充图表
      • 先创建图表figure : fig = plt.figure(figsize=(20,12),facecolor = 'gray')
      • 添加子图 : ax1 = fig.add_subplot(2,2,1);(2,2,1)代表创建2*2的矩阵表格,然后选择第一个,顺序是从左到右从上到下
      • 绘制图表 : 绘制到最后一个子图 ax1.plot(df)
    • 创建方法二:plt.subplots(返回numpy数组)
      • 创建多个子图 : fig,axes = plt.subplots(2,3,figsize=(10,8))
      • 根据索引确定子图 : ax1 = axes[0,2]
      • 填充子图 : ax1.plot(ts)
      • 未填充子图保持空白,但有轮廓
    • 创建方法三:多系列图,分别绘制
      • plt.plot(subplots=True,layout=(2,3))
      • layout设置布局矩阵,按顺序填充
      • subplots为True表示绘制子图
    • 调整
      • sharex,sharey:是否共享x,y刻度(True/False)
      • plt.subplots_adjust(wspace=0,hspace=0) :wspace,hspace:用于控制宽度和高度的百分比

基本图表绘制

  • 图表生成
    • Series生成图表
    • DataFrame生成图表
    • 参数说明
      • Series.plot():series的index为横坐标,value为纵坐标
      • kind → line,bar,barh...(折线图,柱状图,柱状图-横...)
      • label → 图例标签,Dataframe格式以列名为label
      • style → 风格字符串,这里包括了linestyle(-),marker(.),color(g)
      • color → 颜色,有color指定时候,以color颜色为准
      • alpha → 透明度,0-1
      • use_index → 将索引用为刻度标签,默认为True
      • rot → 旋转刻度标签,0-360
      • grid → 显示网格,一般直接用plt.grid
      • xlim,ylim → x,y轴界限
      • xticks,yticks → x,y轴刻度值
      • figsize → 图像大小
      • title → 图名
      • legend → 是否显示图例,一般直接用plt.legend()
      • ax  选择子图
      • subplots → 是否将各个列绘制到不同图表,默认False
  • 柱状图
    • 单系列(Series);plt.plot(kind='bar/barh')
    • 多系列(DataFrame);颜色采用 colormap(色板)
    • plt.bar(x,y,facecolor='yellowgreen',edgecolor='white',width = 1,yerr=0.1*y)
      • x,y参数:x,y值
      • width:宽度比例
      • facecolor柱状图里填充的颜色
      • edgecolor是边框的颜色
      • xerr/yerr :x/y方向error bar
      • plt.text() 添加柱状图上的值,用zip函数,for遍历
  • 堆叠图
    • stacked=True 参数设置
  • 外嵌图表
    • 柱状图外添加表格 plt.table()
      • cellText:表格文本 (不包含标签和索引)
      • cellLoc:cell内文本对齐位置(center,left,right)
      • rowLabels:行标签(一般为索引)
      • colLabels:列标签(一般为标签)
      • rowLoc:行标签对齐位置(right,left,center)
      • loc:表格位置 → left,right,top,bottom(相对于图的位置)
      • plt.xticks([]) : 不显示x轴标注
  • 面积图
    • 创建方法
      • Series.plot.area()
      • DataFrame.plot.area()
    • 注意事项
      • stacked:是否堆叠,默认情况下,区域图被堆叠
      • 为了产生堆积面积图,每列必须是正值或全部负值
      • 当数据有NaN时候,自动填充0,所以需要清洗掉缺失值
  • 填图
    • axes.fill(x,y)或者plt.fill(x,y,ax=axes)
      • axes.legend() 加载图例
      • axes.grid() 加载网格
    • axes.fill_between(x,y1,y2) 填充两个函数之间的区域
  • 饼图
    • plt.pie()绘图
      • plt.axis('equal')   # 保证长宽相等
      • 第一个参数:数据
      • explode:指定每部分的偏移量(以列表传入)
      • labels:标签(一般为数据索引)
      • colors:颜色(以列表传入)
      • autopct:饼图上的数据标签显示方式(如 '%.2f %%')
      • pctdistance:每个饼切片的中心和通过autopct生成的文本开始之间的比例 0.6
      • labeldistance:被画饼标记的直径,默认值:1.1
      • shadow:阴影 True
      • startangle:开始角度
      • radius:半径
      • frame:图框 False
      • counterclock:指定指针方向,顺时针或者逆时针
  • 直方图
    • plt.hist()
      • x : 数据源
      • bins:箱子的宽度(个数)
      • normed :标准化 (已换为density)
      • histtype 风格,bar,barstacked,step,stepfilled
      • orientation 水平还是垂直{‘horizontal’, ‘vertical’}
      • align : {‘left’,‘mid’, ‘right’}, optional(对齐方式)
    • 密度图;s.plot(kind = 'kde')
    • 堆叠直方图;添加参数 stacked
  • 散点图
    • plt.scatter(x, y)
      • s:散点的大小
      • cmap:colormap
      • c = y ,相匹配的坐标列
      • marker : 点的样式
    • pd.plottong.scatter_matrix()散点矩阵
      • diagonal:({‘hist’, ‘kde’}),必须且只能在{‘hist’, ‘kde’}中选择1个 → 每个指标的频率图
  • 极坐标图
    • 概念
      • 由角度和距离构成
      • 调用subplot()创建子图时通过设置projection='polar',便可创建一个极坐标子图
      • 然后调用plot()在极坐标子图中绘图
        • ax1 = plt.subplot(121,projection='polar')
        • ax = fig.add_subplot(111,polar=True)
    • 参数
      • 参数1为角度(弧度制)
      • 参数2为value
      • lw → 线宽
      • set_theta_direction():坐标轴正方向,默认逆时针1
      • set_thetagrids():设置极坐标角度网格线显示及标签 → 网格和标签数量一致
      • set_rgrids():设置极径网格线显示,其中参数必须是正数
      • set_theta_offset():设置角度偏移,逆时针,弧度制
      • set_rlim():设置显示的极径范围
      • set_rmax():设置显示的极径最大值
      • set_rticks():设置极径网格线的显示范围
    • 雷达图
      • 极坐标的折线图/填图 - plt.plot() ----未闭合
      • 极坐标的折线图/填图 - plt.polar() ----首尾闭合
    • 极轴图 - 极坐标的柱状图
  • 箱型图
    • 基本概念
      • 是一种用作显示一组数据分散情况资料的统计图
      • 包含一组数据的:最大值、最小值、中位数、上四分位数(Q3)、下四分位数(Q1)、异常值
      • 中位数 → 一组数据平均分成两份,中间的数
      • 下四分位数Q1 → 是将序列平均分成四份,计算(n+1)/4与(n-1)/4两种,一般使用(n+1)/4
      • 上四分位数Q3 → 是将序列平均分成四份,计算(1+n)/4*3=6.75
      • 内限 → 最大值区间Q3+1.5IQR,最小值区间Q1-1.5IQR (IQR=Q3-Q1)
      • 外限 → 最大值区间Q3+3IQR,最小值区间Q1-3IQR (IQR=Q3-Q1)
      • 异常值 :内限之外 - 中度异常,外限之外 - 极度异常
    • 绘制
      • plt.plot.box()绘制
        • color : 样式填充(着色),传入字典序列
          • boxes → 箱线
          • whiskers → 分位数与error bar横线之间竖线的颜色
          • medians → 中位数线颜色
          • caps → error bar横线颜色
        • vert:是否垂直,默认True
        • position:箱型图占位,传入列表
      • plt.boxplot()绘制
        • sym 异常点形状,参考marker
        • vert = True 是否垂直
        • whis = 1.5, IQR,默认1.5
        • patch_artist = True, 上下四分位框内是否填充,True为填充
        • meanline = True,showmeans = True, 是否有均值线及其形状
        • showbox = True, 是否显示箱线
        • showcaps = True, 是否显示边缘线
        • showfliers = True, 是否显示异常值
        • notch = False, 中间箱体是否缺口
        • return_type = 'dict')    返回类型为字典 
          • boxes, 箱线
          • medians, 中位值的横线,
          • whiskers, 从box到error bar之间的竖线.
          • fliers, 异常值
          • caps, error bar横线
          • means, 均值的横线,

表格处理

  • 表格样式
    • 按元素处理样式:df.style.applymap(def);自动调用其中的函数
    • 按行/列处理样式:df.style.apply(def,参数设置)
      • axis:0为列,1为行,默认为0
      • subset:索引
    • 样式索引、切片
      • df.style.apply(highlight_max, axis = 1, subset = pd.IndexSlice[2:5,['b', 'd']])
      • 通过pd.IndexSlice[]调用切片
      • 也可:df[2:5].style.apply(highlight_max, subset = ['b', 'd']) → 先索引行再做样式
  • 表格显示控制 df.style.format()
    • 按照百分数显示  df.head().style.format('{:.2%}')
    • 显示小数点数   df.head().style.format("{:.4f}")
    • 显示正负数   df.head().style.format("{:+.2f}")
    • 分列显示  df.head().style.format({'b':"{:.2%}", 'c':"{:+.3f}", 'd':"{:.3f}"})
  • 表格样式调用
    • 定位空值   df.style.highlight_null(null_color='red')
    • 色彩映射  df.style.background_gradient(cmap='Greens',axis =1,low=0,high=1)
      • cmap:颜色
      • axis:映射参考,0为行,1以列
    • 条形图  df.style.bar(subset=['A', 'B'], color='#d65f4f', width=100);width:最长长度在格子的占比
    • 分段式构建样式  df.style.bar(subset=['A', 'B'], color='#d65f5f', width=100).highlight_null(null_color='yellow')

你可能感兴趣的:(python,可视化)