相关文章

也可以看看

Python里的数据科学之matplotlib实战

 |   

这篇和 Numpy 类似,是用来将 matplotlib 在日常实践中作的图片作一个总结,方便以后查询上手。

简介

Matlplotlib 是 Python 的一个可视化模块。该项目是由 John D. Hunter 发起的,但却是受 Matlab 启发构建的,并且有一套完全仿照 Matlab 函数形式的绘图接口。它让你方便地制作线条图、饼图、柱状图以及其它专业图形。使用 Matplotlib ,你可以定制所做图表的任一方面。

散点图

散点图是我们最常见的一种图,它一样用来显示数据点在直角坐标系平面上的分布图例。在我们不清楚数据点之间的关系时,常做该图来直观显示数据的分步情况,以便做进一步分析。

  • 图例如下:

    scatter

  • 代码解析如下:

     1"""
     2Simple demo of a scatter plot.
     3"""
     4# coding=utf-8
     5#!/usr/bin/python
     6
     7import numpy as np
     8import matplotlib.pyplot as plt
     9
    10# matplotlib支持中文
    11from pylab import mpl
    12mpl.rcParams['font.sans-serif'] = ['SimHei'] #指定默认字体
    13mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是符号的‘-’显示为方块的问题
    14
    15# 构造数据
    16N = 50
    17x = np.arange(N)
    18y1 = np.random.rand(N)*25
    19y2 = np.random.rand(N)*25+25
    20
    21
    22## scatter常用参数
    23# s[ize]    点的大小
    24# c[olor]   点的颜色
    25# marker    点的图案
    26# alpha     透明度
    27# label     图例说明中的标签
    28plt.scatter(x, y1, s=50, c='b', marker='+', alpha=0.5label=ClassA)
    29plt.scatter(x, y2, s=100, c='r', marker='.', alpha=0.5label=ClassB)
    30## X/Y轴的的极限
    31xdelt = x.max() - x.min()
    32plt.xlim(x.min()-0.1*xdelt,x.max()+0.1*xdelt)
    33plt.ylim(0,50)
    34## 横纵坐标说明
    35plt.xlabel(u'x值说明',fontsize=16)
    36plt.ylabel(u'y值说明',fontsize=16,rotation='horizontal')
    37## 添加图例
    38plt.legend(loc=upper left’,frameon=True)
    39## 图的标题
    40plt.title(u'scatter图',fontsize=20)
    41## 保存图片
    42plt.savefig('scatter.jpg')
    43## 显示图片
    44plt.show()
    

折线图

折线图也是我们常见的一种图,它常用来显示数据的走向趋势。在数据分析中,常用来处理随时间而变化的连续数据。

  • 图例如下:

    polygonal

  • 代码解析如下:

     1"""
     2Simple demo of a polygonal plot.
     3"""
     4# coding=utf-8
     5#!/usr/bin/python
     6
     7import numpy as np
     8import matplotlib.pyplot as plt
     9
    10# matplotlib支持中文
    11from pylab import mpl
    12mpl.rcParams['font.sans-serif'] = ['SimHei'] #指定默认字体
    13mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是符号的‘-’显示为方块的问题
    14
    15# 构造数据
    16N = 50
    17x = np.linspace(-2,2,N)
    18y1 = x**3
    19y2 = np.sin(x)
    20
    21
    22## plot常用参数
    23# 'b'       设置颜色和点的图案
    24# marker    点的图案
    25# label     图例说明中的标签
    26# linewidth 线宽
    27plt.plot(x, y1, 'b*-', label=‘$x^3$’, linewidth=2)
    28plt.plot(x, y2, 'r', label=‘$sin(x)$’, linewidth=2)
    29## 设置坐标轴
    30ax= plt.gca()       # 获取当前坐标系实例
    31# 轴线/标尺设置
    32ax.spines['right'].set_visible(False)
    33ax.spines['top'].set_visible(False)
    34ax.xaxis.set_ticks_position('bottom')   # X轴标尺在轴线下面
    35ax.spines['bottom'].set_position(('data',0))    # 底部轴线在数据区0的位置
    36ax.yaxis.set_ticks_position('left')     # Y轴标尺在轴线左边
    37ax.spines['left'].set_position(('data',0))  # 左边轴线在数据区0的位置
    38## X/Y轴的的极限
    39xdelt = x.max() - x.min()
    40plt.xlim(x.min()-0.1*xdelt,x.max()+0.1*xdelt)
    41plt.ylim(0,50)
    42## 横纵坐标说明
    43plt.xlabel(u'x值说明',fontsize=16)
    44plt.ylabel(u'y值说明',fontsize=16,rotation='horizontal')
    45## 添加图例
    46plt.legend(loc=upper left’,frameon=True)
    47## 图的标题
    48plt.title(u'折线图',fontsize=20)
    49## 保存图片
    50plt.savefig('polygonal.jpg')
    51## 显示图片
    52plt.show()
    

柱状图

柱状图也是我们常见的一种图,它也叫条图,是一种以长方形的长度为变量的表达图形的统计报告图,由一系列高度不等的纵向条纹表示数据分布的情况,用来比较两个或以上的价值。在数据分析中,常用来比较不同的模型而产生的不同结果。

  • 图例如下:

    histogram

  • 代码解析如下:

     1"""
     2Simple demo of a histogram plot.
     3"""
     4# coding=utf-8
     5#!/usr/bin/python
     6
     7import numpy as np
     8import matplotlib.pyplot as plt
     9
    10# matplotlib支持中文
    11from pylab import mpl
    12mpl.rcParams['font.sans-serif'] = ['SimHei'] #指定默认字体
    13mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是符号的‘-’显示为方块的问题
    14
    15# 构造数据
    16mu = 100
    17sigma = 15
    18x = mu + sigma * np.random.randn(10000)
    19
    20
    21num_bins = 5
    22## hist常用参数
    23# num_bins  条数
    24# marker    点的图案
    25# label     图例说明中的标签
    26# linewidth 线宽
    27plt.ot(x, y1, 'b', label=‘$x^3$’, linewidth=2)
    28plt.plot(x, y2, 'r', label=‘$sin(x)$’, linewidth=2)
    29## 设置坐标轴
    30ax= plt.gca()       # 获取当前坐标系实例
    31# 轴线/标尺设置
    32ax.spines['right'].set_visible(False)
    33ax.spines['top'].set_visible(False)
    34ax.xaxis.set_ticks_position('bottom')   # X轴标尺在轴线下面
    35ax.spines['bottom'].set_position(('data',0))    # 底部轴线在数据区0的位置
    36ax.yaxis.set_ticks_position('left')     # Y轴标尺在轴线左边
    37ax.spines['left'].set_position(('data',0))  # 左边轴线在数据区0的位置
    38## X/Y轴的的极限
    39xdelt = x.max() - x.min()
    40plt.xlim(x.min()-0.1*xdelt,x.max()+0.1*xdelt)
    41plt.ylim(0,50)
    42## 横纵坐标说明
    43plt.xlabel(u'x值说明',fontsize=16)
    44plt.ylabel(u'y值说明',fontsize=16,rotation='horizontal')
    45## 添加图例
    46plt.legend(loc=upper left’,frameon=True)
    47## 图的标题
    48plt.title(u'折线图',fontsize=20)
    49## 保存图片
    50plt.savefig('polygonal.jpg')
    51## 显示图片
    52plt.show()
    

问题

  1. 查询matplotlib的配置文件目录

    1import matplotlib
    2matplotlib.get_configdir()
    3# linux ~/.config/matplotlib/matplotlibrc
    4# mac ~/.matplotlib/
    
  2. 更新字体缓存 删除配置文件目录下的 fontlist.cache 文件。

参考文献

  1. matplotlib官网图例
  2. matplotlib源码
  3. matplotlib入门
技术茶话会
< 前一篇 后一篇 >