数据分析第二篇:matplotlib 常用的几个绘图方法
Matplotlib
matplotlib是python的绘图库,使用它可以很方便的绘制出版质量级别的图形
matplotlib的基本功能
1.基本绘图
1.1 绘制坐标系中连续的线,设置线型/线宽/颜色
绘制一条线的相关API
import numpy as np
import matplotlib.pyplot as plt
# xarray:散点的x坐标数组
# yarray:散点的y坐标数组
plt.plot(xarray, yarray)
plt.show() import numpy as np
import matplotlib.pyplot as plt x = np.arange(,)
y = np.arange(,)
plt.plot(x, y)
plt.show()
绘制水平线和垂直线相关API
# 绘制一条垂直x轴的线,需要给定x坐标值的value,指定y坐标范围
plt.vlines(value, ymin, ymax,..)
# 绘制一条垂直y轴的线,需要给定y坐标值的value,指定x坐标范围
plt.hlines(value, xmin, xmax,..) import numpy as np
import matplotlib.pyplot as plt x = np.arange(,)
y = np.arange(,)
plt.plot(x, y)
plt.vlines(, , )
plt.hlines(, , )
plt.show()
线型/线宽/颜色
plt.plot(x,y,
linestyle='', # 线型
linewidth=, # 线宽
color='', # 颜色
alpha=0.5 # 透明度
)
- r 红色
- g 绿色
- b 蓝色
- c cyan
- m 紫色
- y 土黄色
- k 黑色
- w 白色
1.2 设置坐标轴的范围
plt.xlim(x_lim_min, x_lim_max)
plt.ylim(y_lim_min, y_lim_max)
1.3 设置坐标刻度
# 设置x轴的坐标刻度
# x_val_list:坐标值列表
# x_text_list:坐标刻度列表
plt.xticks(x_val_list, x_text_list)
plt.yticks(y_val_list, y_text_list) # 设置坐标刻度[-π,-π/, , π/, π]
---------------方法一------------
x_val_list= [-np.pi, -np.pi/, , np.pi/, np.pi]
x_text_list = ['-π','-π/2','','π/2','π']
plt.xticks(x_val_list, x_text_list) --------------方法二-------------
x_text_list = [r'$-\pi$',r'$-\frac{\pi}{2}$',r'',r'$\frac{\pi}{2}$',r'${\pi}$']
刻度文本的特殊语法 - LaTeX排版语法规范
设置坐标轴
坐标轴包含四个:left/right/bottom/top # getCurrentAxis() 获取当前坐标轴对象
ax = plt.gca()
ax1 = ax.spines['left']
axr = ax.spines['right'] # 设置坐标轴的颜色
axl.set_color('none') # 设置坐标轴颜色为透明
# 设置坐标轴的位置
axl.set_position((type,val)) # 设置坐标轴颜色与位置
ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['left'].set_position(('data',))
ax.spines['bottom'].set_position(('data',))
1.4 显示图例
# 自动在窗口中某个位置添加图例
# 添加图例需要在调用plt.plot()绘制曲线时设置label参数
通过loc参数设置图例的位置
plt.legend(loc='')
# 实例
plt.plot(x, cos_x, linestyle='--', linewidth=, color='y', label=r'$y =\frac{1}{2}cos(x)$')
plt.plot(x, sin_x, linestyle='-.', linewidth=, color='m', label=r'$y=sin(x)$')
plt.legend()
1.5 绘制特殊点
plt.scatter(x,y,
marker='', # 点型
s=, # 点的大小
edgecolor='', # 边缘色
facecolor='', # 填充色
zorder=) # 绘制顺序
1.6 为图像添加备注
plt.annotate(
'', # 备注内容
xycoords='', # 备注目标点使用的坐标系
xy=(x,y), # 备注目标点的坐标
textcoords= '', # 备注文本使用的坐标系
xytext = (x,y), # 备注文本的坐标
fontsize = , # 备注文本字体大小
arrowprops = dict() # 提示箭头属性
) arrowprops参数使用字典定义只想目标点的箭头样式 arrowprops = dict(
arrowstyle = '', # 定义箭头样式
connectionstyle = '' # 定义连接线样式
)
# 可设置箭头的弧度
connectionstyle='arc3, rad=0.1',
2.高级绘图
2.1 绘制子图
一次绘制两个窗口
plt.figure(
'', # 窗口标题
figsize=(,), # 窗口大小
facecolor = '' # 窗口颜色
)
plt.show() # 展示窗口 # 可以创建多个窗口,每个窗口的标题不同,后续调用plt的方法进行绘制时将作用于当前窗口上
#,如果希望修改已经创建过的窗口,可以通过plt.figure('figure1')方法把该窗口设置为当前窗口。
plt.figure('figure1', figsize=(,), facecolor='lightgray')
plt.figure('figure2', figsize=(,), facecolor='lightgray')
设置当前窗口的常用参数
plt.title('', fontsize=18) # 设置标题
plt.xlabel('', fontsize=12) # 设置窗口中x坐标轴的文本及y坐标轴的文本
plt.ylabel('', fontsize=12)
plt.tick_params(label=8) #
plt.grid() # 设置图表网格线
plt.tight_layout() # 设置紧凑布局
矩阵式布局
plt.figure('')
# 开始绘制一个子图
# 通过参数rows与cols拆分当前窗口,每个子窗口都将分配一个序号, 1-x
plt.subplot(rows, cols, num)
plt.subplot(2,3,2)
plt.subplot(233)
plt.show()
绘制九宫格子图
import numpy as np
import matplotlib.pyplot as mp
mp.figure('Sub Layout', facecolor='gray')
for i in range(1, 10):
mp.subplot(3, 3, i)
mp.text(0.5, 0.5, i, ha='center',
va='center', size=36, alpha=0.8)
mp.xticks([])
mp.yticks([])
mp.tight_layout()
mp.show()
网格式布局
import matplotlib.gridspec as mg
mp.figure('')
# 该方法将会返回子图的二维数组
gs = mg.GridSpec(3, 3)
# 通过subplot对子图进行合并
# gs[0, :2]->合并0行中的0/1列作为1个子图进行绘制
mp.subplot(gs[0, :2])
mp.show()
自由布局
plt.figure(
'', # 窗口标题
figsize=(,), # 窗口大小
facecolor = '' # 窗口颜色
)
plt.show() # 展示窗口 # 可以创建多个窗口,每个窗口的标题不同,后续调用plt的方法进行绘制时将作用于当前窗口上,如果希望修改已经创建过的窗口,可以通过plt.figure('figure1')方法把该窗口设置为当前窗口。
plt.figure('figure1', figsize=(,), facecolor='lightgray')
plt.figure('figure2', figsize=(,), facecolor='lightgray')
2.2散点图
plt.scatter(x,y,marker='', s=,color='',edgecolor='',facecolor='',zorder=)
随机生成一堆点身高期望在1.72 体重在60kg
import numpy as np
import matplotlib.pyplot as plt n =
x= np.random.normal(, , n)
y= np.random.normal(, , n) plt.figure('Persons', facecolor='lightgray')
plt.title('Persons')
plt.xlabel('height')
plt.ylabel('weight')
d = (x-)** + (y-)**
# 颜色映射
plt.scatter(x, y, c=d, s=)
plt.show()
2.6 图像填充
以某种颜色自动填充两条曲线的闭合区域。
plt.fill_between(
x, # x轴水平坐标
sinx, # sinx曲线的y坐标
cosx, # cosx曲线的y坐标
sinx<cosx, # 填充条件为TRUE时,填充
color='', # 颜色
alpha=0.3 # 透明度
)
实例:sinx>cosx的部分进行填充
import numpy as np
import matplotlib.pyplot as plt x = np.linspace(, *np.pi,)
sinx = np.sin(x)
cosx = np.cos(x/)/ plt.figure('Fill', facecolor='lightgray')
plt.title('Fill')
plt.xlabel('X')
plt.ylabel('Y')
plt.tick_params(labelsize=)
plt.plot(x,sinx,color='y', label='y=sin(x)')
plt.plot(x, cosx,color='b', label='y=cos(x/2)/2') plt.fill_between(
x, # x轴水平坐标
sinx, # sinx曲线的y坐标
cosx, # cosx曲线的y坐标
sinx>cosx, # 填充条件为TRUE时,填充
color='dodgerblue', # 颜色
alpha=0.5 # 透明度
)
plt.tight_layout()
plt.legend()
plt.show()
2.7 条形图(柱状图)
plt.bar(
x, # 水平坐标数组
y, # 柱状图高度数组
width, # 柱子的宽度
color='', # 填充颜色
label='', # 标签
alpha=0.5
)
案例:绘制苹果12个月的销量,绘制橘子的销量
import numpy as np
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体) apples = [, , , , , , , , , , , ]
oranges = [, , , , , , , , , , , ] plt.figure('Bar', facecolor='lightgray')
plt.title('Bar', fontsize=)
plt.xlabel('month', fontsize=)
plt.ylabel('Price', fontsize=)
plt.tick_params(labelsize=)
plt.grid(linestyle=':', axis='y') x = np.arange(len(apples))
plt.bar(x - 0.2, apples, 0.4, color='y', label='Apple')
plt.bar(x + 0.2, oranges, 0.4, color='b', label='Orange') plt.xticks(x, ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月',
'十月', '十一月', '十二月'])
plt.legend()
plt.show()
2.8 饼图
功能:统计出占所有总量的百分比
plt.pie(
values, # 值列表
spaces, # 扇形之间的间距列表
labels, # 扇形的标签列表
colors, # 扇形的颜色列表
'%d%%', # 所占比例的格式
shadow=True, # 绘制阴影
startangle=, # 逆时针绘制饼状图的起始角度
radius= # 半径
)
案例:绘制饼状图显示5门语言的流行度
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体) plt.figure('Pie', facecolor='lightgray')
plt.title('Pie', fontsize=) values = [, , , , ]
spaces = [0.05, 0.01, 0.01, 0.01, 0.01]
labels = ['Python', 'Javascript', 'C++', 'Java', 'PHP']
colors = ['r', 'g', 'b', 'y', 'c']
plt.pie(values, spaces, labels, colors,'%d%%', shadow=False) plt.legend()
plt.show()
2.9 等高线图
组成等高线需要网格点坐标矩阵,也需要每个点的高度,所以等高线的绘制属于3D数学模型的范畴
mp.contourf(
x, # 网格坐标矩阵
y,
z, # 坐标矩阵中每个点的值
, # 把整个模型的高度等分为8份
cmap='jet' # 颜色映射
)
import numpy as np
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False #解决坐标轴负号的显示问题
n =
x, y = np.meshgrid(np.linspace(-,,n),
np.linspace(-,,n))
z = (-x/+x**+y**)*np.exp(-x** - y**)
plt.figure('Contour', facecolor='lightgray')
plt.title('Contour', fontsize=)
plt.xlabel('x', fontsize=)
plt.ylabel('y', fontsize=)
plt.tick_params(labelsize=)
plt.grid(linestyle=':')
plt.contourf(x,y,z,,cmap='jet')
cntr = plt.contour(x,y,z,,colors='black', linewidths=0.5) # 设置等高线的标签文本
plt.clabel(cntr, inline_spacing=, fmt='%.1f', fontsize=) plt.legend()
plt.show()
2.10 热成像图
用图像的方式显示矩阵集矩阵中值的大小
# origin的可选值:
# 'upper':默认值 y轴方向向下,原点在上方
# 'lower':原点在下方
plt.imshow(z, cmap='jet',origin='lower')
实例:热成像图
import numpy as np
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False #解决坐标轴负号的显示问题
n =
x, y = np.meshgrid(np.linspace(-,,n),
np.linspace(-,,n))
z = (-x/+x**+y**)*np.exp(-x** - y**)
plt.figure('Hot', facecolor='lightgray')
plt.title('Hot', fontsize=)
plt.xlabel('x', fontsize=)
plt.ylabel('y', fontsize=)
plt.tick_params(labelsize=)
plt.grid(linestyle=':')
plt.imshow(z, cmap='jet', origin='lower')
plt.show()
2.11 3D图像绘制
matplotlib支持绘制三维曲面,但需要使用axis3d提供的3D坐标轴进行绘制。 from mpl_toolkits.mplot3d import axes3d
ax3d = plt.gca(projection='3d')
# 使用ax3d对象绘制3维图形
ax3d.scatter() # 3维散点图
ax3d.plot_surface() # 3维平面图
ax3d.plot_wireframe() # 3维线框图
三维散点图的绘制
ax3d.scatter(
x,y,z, # 点的位置坐标点
marker,
s=,
zorder=,
color='',
edgecolor='',
facecolor='',
c=v,
cmap=''
)
案例:生成三维散点数组,显示在三维坐标中。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False # 解决坐标轴负号的显示问题
n =
# 期望是0, 标准差是1
x = np.random.normal(, , n)
y = np.random.normal(, , n)
z = np.random.normal(, , n) plt.figure('Scatter', facecolor='lightgray')
plt.title('Scatter', fontsize=)
plt.grid(linestyle=':') ax = plt.gca(projection='3d')
ax.set_xlabel('X', fontsize=)
ax.set_ylabel('Y', fontsize=)
ax.set_zlabel('Z', fontsize=)
plt.tick_params(labelsize=) # v的值用于设置散点的颜色
v = np.sqrt(x ** + y ** + z ** )
ax.scatter(x, y, z, c=v, cmap='jet') plt.show()
三维平面图的绘制
ax3d.plot_surface(
x,y,z, # 点的位置坐标点
rstride = , # 行跨距
cstride=, # 列跨距
cmap='jet' # 颜色映射
)
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False # 解决坐标轴负号的显示问题
n =
x, y = np.meshgrid(np.linspace(-, , n),
np.linspace(-, , n))
z = ( - x / + x ** + y ** ) * np.exp(-x ** - y ** ) plt.figure('三维平面图', facecolor='lightgray')
plt.title('三维平面图', fontsize=)
plt.grid(linestyle=':') ax = plt.gca(projection='3d')
ax.set_xlabel('X', fontsize=)
ax.set_ylabel('Y', fontsize=)
ax.set_zlabel('Z', fontsize=)
plt.tick_params(labelsize=) # v的值用于设置散点的颜色
v = np.sqrt(x ** + y ** + z ** )
ax.plot_surface(x, y, z, rstride=, cstride=, cmap='jet') plt.show()
三维线框图的绘制
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False # 解决坐标轴负号的显示问题
n =
x, y = np.meshgrid(np.linspace(-, , n),
np.linspace(-, , n))
z = ( - x / + x ** + y ** ) * np.exp(-x ** - y ** ) plt.figure('三维平面图', facecolor='lightgray')
plt.title('三维平面图', fontsize=)
plt.grid(linestyle=':') ax = plt.gca(projection='3d')
ax.set_xlabel('X', fontsize=)
ax.set_ylabel('Y', fontsize=)
ax.set_zlabel('Z', fontsize=)
plt.tick_params(labelsize=) # v的值用于设置散点的颜色
v = np.sqrt(x ** + y ** + z ** )
ax.plot_wireframe(x, y, z, rstride=, cstride=, cmap='jet')
plt.show()
数据分析第二篇:matplotlib 常用的几个绘图方法的更多相关文章
- 【HANA系列】SAP 【第二篇】EXCEL连接SAP HANA的方法(ODBC)
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP [第二篇]EXCEL连接 ...
- 第二篇 Mysql常用操作记录(转载)
我们在创建网站的时候,一般需要用到数据库.考虑到安全性,建议使用非root用户.常用命令如下: 1.新建用户 //登录MYSQL@>mysql -u root -p@>密码//创建用户my ...
- 第二篇 HTML 常用元素及属性值
常用元素及属性值 先和同学了解下,一部分常用的元素,区别以及属性,常用在哪里. 标签是由左右尖括号抱起来的,由开始标签开始,再由结束标签结束,里面内容则是元素,比如:<div>< ...
- SlidingMenu第二篇 --- SlidingMenu常用属性介绍
/** * 设置滑动的屏幕范围 * 1. TOUCHMODE_MARGIN 设置为全屏边缘可滑动 * 2. TOUCHMODE_FULLSCREEN 设置为全屏区域都可以滑动 * 3. TOUCHMO ...
- matplotlib常用基础知识
linestyle(ls)线型参数表 常用color(c)参数表 marker标记符号表 plt常用方法表 plt.legend(loc=0)用于显示图例,图例的位置参数loc matplotlib常 ...
- Java中常用的七个阻塞队列第二篇DelayQueue源码介绍
Java中常用的七个阻塞队列第二篇DelayQueue源码介绍 通过前面两篇文章,我们对队列有了了解及已经认识了常用阻塞队列中的三个了.本篇我们继续介绍剩下的几个队列. 本文主要内容:通过源码学习De ...
- 小象学院Python数据分析第二期【升级版】
点击了解更多Python课程>>> 小象学院Python数据分析第二期[升级版] 主讲老师: 梁斌 资深算法工程师 查尔斯特大学(Charles Sturt University)计 ...
- 深入理解javascript对象系列第二篇——属性操作
× 目录 [1]查询 [2]设置 [3]删除[4]继承 前面的话 对于对象来说,属性操作是绕不开的话题.类似于“增删改查”的基本操作,属性操作分为属性查询.属性设置.属性删除,还包括属性继承.本文是对 ...
- [转]Android开源项目第二篇——工具库篇
本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多 ...
随机推荐
- Python基础之函数与装饰器
阅读目录 一.为什么要使用函数 二.函数的定义与调用 三.函数返回值 四.函数的参数 五.本章小结 六.装饰器 一.函数流程图: 函数名的命名规则: 1.函数名必须由字母下划线数字组成,不能是关键字和 ...
- Jquery 中Ajax使用的四种情况
<script type="text/javascript" language="javascript" src="JS/jquery-1[1] ...
- tigervnc环境搭建
在root用户下执行以下操作: 1.安装tigervnc yum install tigervnc tigervnc-server 2.配置tigervnc 编辑vncservers文件,执行如下命令 ...
- unittest 结合 ddt
数据驱动测试ddt,使用的重点: 1.@ddt.ddt2.@ddt.data(*zip(range(10),range(10,20))) 注意一定要带* 3.@ddt.unpack # c ...
- Unity5 怎样做资源管理和增量更新
工具 Unity 中的资源来源有三个途径:一个是Unity自己主动打包资源.一个是Resources.一个是AssetBundle. Unity自己主动打包资源是指在Unity场景中直接使用到的资源会 ...
- 2016 acm香港网络赛 F题. Crazy Driver(水题)
原题网址:https://open.kattis.com/problems/driver Crazy Driver In the Linear City, there are N gates arra ...
- PHP中使用POST发送请求的常用方式
前提概要: 在PHP进行项目开发过程中,使用post发送请求的情况很多,以下总结了项目中主要用的两种方式. 总结下: 在我接触到的项目中用到第二种情况较多,比如写:短信接口.....总体来说比较简单便 ...
- -[ASIDataCompressor compressBytes:length:error:shouldFinish:] in ASIDataCompressor.o
本文转载至 http://blog.csdn.net/m372897500/article/details/38293973 -[ASIDataCompressor compressBytes:len ...
- ArcGIS API for js Legend(图例)
1.说明 有关怎么把ArcGIS API for js部署到IIS上,请参考我上面的写的博客https://www.cnblogs.com/net064/p/10302660.html 2.运行效果 ...
- 九度OJ 1352:和为S的两个数字 (查找)
时间限制:2 秒 内存限制:32 兆 特殊判题:否 提交:3160 解决:833 题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输 ...