matplotlib 数据可视化
图的基本结构
通常,使用 numpy 组织数据, 使用 matplotlib API 进行数据图像绘制。 一幅数据图基本上包括如下结构:
- Data: 数据区,包括数据点、描绘形状
- Axis: 坐标轴,包括 X 轴、 Y 轴及其标签、刻度尺及其标签
- Title: 标题,数据图的描述
- Legend: 图例,区分图中包含的多种曲线或不同分类的数据
- 其他的还有图形文本 (Text)、注解 (Annotate)等其他描述
详细的结构图如下图所示:
画法
按照绘图结构,可将数据图的绘制分为如下几个步骤:
- 导入 matplotlib 包相关工具包
- 准备数据,numpy 数组存储
- 绘制原始曲线
- 配置标题、坐标轴、刻度、图例
- 添加文字说明、注解
- 显示、保存绘图结果
导包
#coding:utf-8 import numpy as np import matplotlib.pyplot as plt from pylab import *
准备数据
numpy 常用来组织源数据:
# 定义数据部分 x = np.arange(0., 10, 0.2) y1 = np.cos(x) y2 = np.sin(x) y3 = np.sqrt(x)
绘制基本曲线
使用 plot 函数直接绘制上述函数曲线,可以通过配置 plot 函数参数调整曲线的样式、粗细、颜色、标记等:
# 绘制 3 条函数曲线 plt.plot(x, y1, color='blue', linewidth=1.5, linestyle='-', marker='.', label=r'$y = cos{x}$') plt.plot(x, y2, color='green', linewidth=1.5, linestyle='-', marker='*', label=r'$y = sin{x}$') plt.plot(x, y3, color='m', linewidth=1.5, linestyle='-', marker='x', label=r'$y = \sqrt{x}$')
设置坐标轴
# 坐标轴上移 ax = plt.subplot(111) ax.spines['right'].set_color('none') # 去掉右边的边框线 ax.spines['top'].set_color('none') # 去掉上边的边框线 # 移动下边边框线,相当于移动 X 轴 ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data', 0)) # 移动左边边框线,相当于移动 y 轴 ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data', 0))# 设置 x, y 轴的刻度取值范围 plt.xlim(x.min()*1.1, x.max()*1.1) plt.ylim(-1.5, 4.0) # 设置 x, y 轴的刻度标签值 plt.xticks([2, 4, 6, 8, 10], [r'2', r'4', r'6', r'8', r'10']) plt.yticks([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], [r'-1.0', r'0.0', r'1.0', r'2.0', r'3.0', r'4.0']) """ plt.yticks([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0]) """# 设置标题、x轴、y轴 plt.title(r'$the \ function \ figure \ of \ cos(), \ sin() \ and \ sqrt()$', fontsize=19) plt.xlabel(r'$the \ input \ value \ of \ x$', fontsize=18, labelpad=88.8) plt.ylabel(r'$y = f(x)$', fontsize=18, labelpad=12.5)
设置文字描述、注解
在数据图中添加文字描述 text:
plt.text(4, 1.68, r'$x \in [0.0, \ 10.0]$', color='k', fontsize=15) plt.text(4, 1.38, r'$y \in [-1.0, \ 4.0]$', color='k', fontsize=15)
// 其中,r’……’ 语句表示使用 LaTex 公式符号.
另外,
文本倾斜:在plt.text()中加入fontstyle='italic' 文本旋转:在plt.text()中加入参数rotation,例如rotation=45
在数据图中给特殊点添加注解 annotate:
# 特殊点添加注解 plt.scatter([8,],[np.sqrt(8),], 50, color ='m') # 使用散点图放大当前点 plt.annotate(r'$2\sqrt{2}$', xy=(8, np.sqrt(8)), xytext=(8.5, 2.2), fontsize=16, color='#090909', arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad=0.1', color='#090909')) """ plt.annotate('%.4f' % acc, xy=(thres, acc), xytext=(thres, acc+0.04), ha='center', color='black', arrowprops=dict(arrowstyle='->', color='black')) #在正上方添加注解 plt.annotate('%.4f' % cov, xy=(thres, cov), xytext=(thres, cov-0.04), ha='center', color='green', arrowprops=dict(arrowstyle='->', color='green')) #在正下方添加注解, ha表示horizontalalignment(水平对齐) """
设置图例
可使用如下两种方式,给绘图设置图例:
1: 在 plt.plot 函数中添加 label 参数后,使用 plt.legend(loc=’up right’)
2: 不使用参数 label, 直接使用如下命令:
plt.legend(['cos(x)', 'sin(x)', 'sqrt(x)'], loc='up right')
loc 参数表示图例的位置,常见的位置参数如下:
网格线开关
# 显示网格线 plt.grid(True)
显示、保存
plt.show() # 显示 # savefig('../figures/plot3d_ex.png',dpi=48) # 保存,前提目录存在
其它有用的设置
1. 调整图像边缘及图像间的空白间隔
方法1:plt.subplots_adjust()
自动调整图像外部边缘,但是此方法不能够很好的控制图像间的间隔。
方法2:plt.subplots_adjust()
能同时控制图像外侧边缘以及图像间的空白区域,比较灵活.例如 plt.subplots_adjust(left=0.2, bottom=0.2, right=0.8, top=0.8,hspace=0.2, wspace=0.3)
2.在图中显示中文
方法1:使用rcParams,设置其font.family为中文字符
import matplotlib matplotlib.rcParams['font.family'] = 'SimHei'
前提是系统中有'SimHei'字体
方法2:指定系统中文字体
首先,查看系统支持的中文字体列表:
$ fc-list :lang=zh /usr/share/fonts/truetype/arphic/uming.ttc: AR PL UMing TW MBE:style=Light /usr/share/fonts/truetype/arphic/ukai.ttc: AR PL UKai CN:style=Book /usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc: Noto Sans Mono CJK KR,Noto Sans Mono CJK KR Bold:style=Bold,Regular /usr/share/fonts/opentype/noto/NotoSansCJK-Black.ttc: Noto Sans CJK TC,Noto Sans CJK TC Black:style=Black,Regular/usr/share/fonts/opentype/noto/NotoSansCJK-Medium.ttc: Noto Sans CJK JP,Noto Sans CJK JP Medium:style=Medium,Regular /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc: Noto Sans CJK JP,Noto Sans CJK JP Regular:style=Regular /usr/share/fonts/opentype/noto/NotoSansCJK-Light.ttc: Noto Sans CJK KR,Noto Sans CJK KR Light:style=Light,Regular
然后,在代码中指定字体设置:
#coding:utf-8 import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties myfont = FontProperties(fname='/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc') #定义自定义字体,文件名从上一步查看的系统中文字体列表中来 plt.plot([x, y]) plt.title(u'中文',fontproperties=myfont) plt.text(x=67, y=1.06, s=u'样本数', ha='left', fontproperties=myfont) plt.show()
参考:
【Matplotlib】绘图常见设置说明
Python matplotlib 数据可视化
matplotlib 怎么添加倾斜的文字?
matplotlib绘图基础
Python科学绘图实例附代码
Mooc数据分析-02数据展示
matplotlib可视化之如何给图形添加数据标签?
彻底解决matplotlib中文乱码问题
转载于:https://www.cnblogs.com/bymo/p/7280829.html
matplotlib 数据可视化相关推荐
- python如何读取mat文件可视化_python Matplotlib数据可视化(1):简单入门
1 matplot入门指南 matplotlib是Python科学计算中使用最多的一个可视化库,功能丰富,提供了非常多的可视化方案,基本能够满足各种场景下的数据可视化需求.但功能丰富从另一方面来说也意 ...
- chart.js 饼图显示百分比_Python怎么画饼图?Matplotlib数据可视化004:饼图
前文回看: [Python菜鸟进阶大神]Matplotlib数据可视化001:基础API汇总&散点图 [Python菜鸟进阶大神]Matplotlib数据可视化002:折线图 [Python菜 ...
- Python—实训day10—Matplotlib数据可视化和scikit-learn构建模型
1.Matplotlib数据可视化基础 import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif ...
- 数据科学与python语言——Matplotlib数据可视化基础
Matplotlib数据可视化基础 一.读取数据与数据处理阶段 1.提取指定行中的数据 2.得到>指定数值的数据 3.得到=指定值得数据 4.整体的数据处理: 二.画图函数 1.plt.subp ...
- [转载] Python数据分析之Matplotlib数据可视化实例
参考链接: 使用Python进行数据分析和可视化2 Matplotlib数据可视化的应用实例 分析 :2000至2017年各季度国民生产总值数据 npy文件--numpy专用的二进制格式 np.lo ...
- Matplotlib数据可视化高级
目录 前言 1.多图布局 1.1 子视图 1.2 嵌套 1.3 多图布局分格显示 1.3.1 均匀布局 1.3.2 不均匀分布 1.4 双轴显示 2.文本.注释.箭头 2.1 文本 2.2 箭头 2. ...
- Python数据科学学习笔记之——Matplotlib数据可视化
Matplotlib 数据可视化 1.Matplotlib 常用技巧 1.1.导入 Matplotlib import matplotlib as mpl import matplotlib.pypl ...
- Matplotlib数据可视化(5)
1 Matplotlib数据可视化 1.1 第一部分 课程介绍 pip install matplotlib -i Simple Index 在数据分析与机器学习中,我们经常要用到大量的可视化操作 ...
- Matplotlib 数据可视化(读书笔记)
Python 数据科学手册第四章读书笔记,仅供学习交流使用 4. Matplotlib 数据可视化 4.1 Matplotlib 常用技巧 4.1.1 导入 Matplotlib plt 是最常用的接 ...
最新文章
- echarts柱状图 与轴不重叠_用Echarts做堆积的柱状图,当横轴为“time”类型时,都是从0开始显示,而不是叠加,为什么会这样?...
- 《软件工程课程总结》
- Xilinx Platform Cable USB II 下载器驱动安装教程——Win10
- QT学习:Qt操作数据库
- opencv3/C++ 机器学习-SVM应用实例:药品(胶囊)识别与分类
- 综述 | Google团队发布,一文概览Transformer模型的17大高效变种
- 【java.lang.NoClassDefFoundError: t/SpringBootConfiguration】
- 用 Python 实现植物大战僵尸代码!
- 每周荐书:MySQL、Kafka、微信小程序(评论送书)
- JavaScript通用库(转)
- C# FAQ: const和static readonly有什么区别?
- machine learning之PCA、ICA
- 基于SSM的订餐管理系统
- 《望洞庭湖赠张丞相》 孟浩然
- Bias and Debias in Recommender System: A Survey and Future Directions学习笔记
- win10基于QT开发手机安卓App
- 基于轮廓系数来选择n_clusters(Kmeans聚类分析)
- 什么样的岗位会最先被人工智能 (AI) 取代?
- 【python教程】揭秘京东|淘宝秒杀抢购背后的黑幕,为什么你总抢不到商品?
- linux fedora 10下载,Linux_Fedora 9官方最终稳定版下载地址集合,HTTP下载:http://mirror.karneval.cz/p - phpStudy...
热门文章
- 【opencv】【mediapipe】手势检测的有趣玩法
- 每天进步一点点《ML - DBSCAN》
- 漫步数学分析番外二(上)
- python 32位软件下载安装_Python32位官方下载-Python(开发环境工具)v3.9.1 x32 官方win版-ucbug软件站...
- echart多个柱状图 设置y轴显示_Echart可视化学习笔记(五)
- pip与conda简述
- php要求输入是个数求平均值、_Excel表格技巧—如何在 Excel 中快速完成求和、平均值、百分比...
- tftp服务器从交换机上下载配置命令_软考网络工程师之交换机和路由(交换机基础)...
- python如何并发运行2个软件_如何利用并发性加速你的python程序(二):I/O 绑定程序加速...
- HTML是万维网核心语言的第几代,Html5相关的知识点总结