图的基本结构

通常,使用 numpy 组织数据, 使用 matplotlib API 进行数据图像绘制。 一幅数据图基本上包括如下结构:

  1. Data: 数据区,包括数据点、描绘形状
  2. Axis: 坐标轴,包括 X 轴、 Y 轴及其标签、刻度尺及其标签
  3. Title: 标题,数据图的描述
  4. Legend: 图例,区分图中包含的多种曲线或不同分类的数据
  5. 其他的还有图形文本 (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 数据可视化相关推荐

  1. python如何读取mat文件可视化_python Matplotlib数据可视化(1):简单入门

    1 matplot入门指南 matplotlib是Python科学计算中使用最多的一个可视化库,功能丰富,提供了非常多的可视化方案,基本能够满足各种场景下的数据可视化需求.但功能丰富从另一方面来说也意 ...

  2. chart.js 饼图显示百分比_Python怎么画饼图?Matplotlib数据可视化004:饼图

    前文回看: [Python菜鸟进阶大神]Matplotlib数据可视化001:基础API汇总&散点图 [Python菜鸟进阶大神]Matplotlib数据可视化002:折线图 [Python菜 ...

  3. Python—实训day10—Matplotlib数据可视化和scikit-learn构建模型

    1.Matplotlib数据可视化基础 import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif ...

  4. 数据科学与python语言——Matplotlib数据可视化基础

    Matplotlib数据可视化基础 一.读取数据与数据处理阶段 1.提取指定行中的数据 2.得到>指定数值的数据 3.得到=指定值得数据 4.整体的数据处理: 二.画图函数 1.plt.subp ...

  5. [转载] Python数据分析之Matplotlib数据可视化实例

    参考链接: 使用Python进行数据分析和可视化2 Matplotlib数据可视化的应用实例 分析 :2000至2017年各季度国民生产总值数据  npy文件--numpy专用的二进制格式 np.lo ...

  6. Matplotlib数据可视化高级

    目录 前言 1.多图布局 1.1 子视图 1.2 嵌套 1.3 多图布局分格显示 1.3.1 均匀布局 1.3.2 不均匀分布 1.4 双轴显示 2.文本.注释.箭头 2.1 文本 2.2 箭头 2. ...

  7. Python数据科学学习笔记之——Matplotlib数据可视化

    Matplotlib 数据可视化 1.Matplotlib 常用技巧 1.1.导入 Matplotlib import matplotlib as mpl import matplotlib.pypl ...

  8. Matplotlib数据可视化(5)

    1  Matplotlib数据可视化 1.1  第一部分 课程介绍 pip install matplotlib -i Simple Index 在数据分析与机器学习中,我们经常要用到大量的可视化操作 ...

  9. Matplotlib 数据可视化(读书笔记)

    Python 数据科学手册第四章读书笔记,仅供学习交流使用 4. Matplotlib 数据可视化 4.1 Matplotlib 常用技巧 4.1.1 导入 Matplotlib plt 是最常用的接 ...

最新文章

  1. echarts柱状图 与轴不重叠_用Echarts做堆积的柱状图,当横轴为“time”类型时,都是从0开始显示,而不是叠加,为什么会这样?...
  2. 《软件工程课程总结》
  3. Xilinx Platform Cable USB II 下载器驱动安装教程——Win10
  4. QT学习:Qt操作数据库
  5. opencv3/C++ 机器学习-SVM应用实例:药品(胶囊)识别与分类
  6. 综述 | Google团队发布,一文概览Transformer模型的17大高效变种
  7. 【java.lang.NoClassDefFoundError: t/SpringBootConfiguration】
  8. 用 Python 实现植物大战僵尸代码!
  9. 每周荐书:MySQL、Kafka、微信小程序(评论送书)
  10. JavaScript通用库(转)
  11. C# FAQ: const和static readonly有什么区别?
  12. machine learning之PCA、ICA
  13. 基于SSM的订餐管理系统
  14. 《望洞庭湖赠张丞相》 孟浩然
  15. Bias and Debias in Recommender System: A Survey and Future Directions学习笔记
  16. win10基于QT开发手机安卓App
  17. 基于轮廓系数来选择n_clusters(Kmeans聚类分析)
  18. 什么样的岗位会最先被人工智能 (AI) 取代?
  19. 【python教程】揭秘京东|淘宝秒杀抢购背后的黑幕,为什么你总抢不到商品?
  20. linux fedora 10下载,Linux_Fedora 9官方最终稳定版下载地址集合,HTTP下载:http://mirror.karneval.cz/p - phpStudy...

热门文章

  1. 【opencv】【mediapipe】手势检测的有趣玩法
  2. 每天进步一点点《ML - DBSCAN》
  3. 漫步数学分析番外二(上)
  4. python 32位软件下载安装_Python32位官方下载-Python(开发环境工具)v3.9.1 x32 官方win版-ucbug软件站...
  5. echart多个柱状图 设置y轴显示_Echart可视化学习笔记(五)
  6. pip与conda简述
  7. php要求输入是个数求平均值、_Excel表格技巧—如何在 Excel 中快速完成求和、平均值、百分比...
  8. tftp服务器从交换机上下载配置命令_软考网络工程师之交换机和路由(交换机基础)...
  9. python如何并发运行2个软件_如何利用并发性加速你的python程序(二):I/O 绑定程序加速...
  10. HTML是万维网核心语言的第几代,Html5相关的知识点总结