转自: 数据Seminar公众号

介绍

本文不是一篇详尽的、从简到繁的 Maplotlib 画图教程,而是用各种例子快速直观地让读者上手 Matplotlib 画图中的一些常用的、基础的操作。本文不对各种数据图(折线图、柱状图等)作介绍。文中配有效果示意图及代码。本文亦可作常用画图函数/参数查询之用。

什么样的数据图才是好的?

图之好坏不在繁简,一副好图,应该让读者能清晰明了地理解你想要表达的意思。所以在设计图的时候,此为第一要义。

检查你的数据图

是否对色盲友好?

避免过多地使用红绿配色。

如果打印成黑白稿(grayscale)的话,读者是否还能分辨出不同的元素?

避免仅使用颜色来区分元素,使用恰当、对比度高的颜色,以及 Marker、线的样式、粗细等。

图片的质量是否足够高?

PDF、EPS 等矢量图、分辨率高的 PNG、JPG。

标题、标签、刻度、图例是否正确,表达清楚?

最好不要仅使用数学符号来表示轴标签,例如 α、β 等,使用明确的文字来描述。

使用的字体与正文是否一致?

基础知识

在介绍其他内容之前,我们先回顾一下基础知识,这里借用 Matplotlib 文档的一张图[1]:

图中共标出了14种概念:

  • Figure - 画板

  • Title - 标题

  • X axis label - X轴标签

  • Y axis label - Y轴标签

  • Legend - 图例

  • Major tick label - 主刻度标签

  • Minor tick label - 次刻度标签

  • Grid - 网格

  • Line (line plot) - 线

  • Markers (scatter plot) - 标记

  • Major tick - 主刻度

  • Minor tick - 次刻度

  • Axes - 轴

  • Spines - 脊

这些基础概念十分有用,希望大家能记住其作用及对应的英文。如果遇到更复杂的需求,可以直接在官网文档(https://matplotlib.org/contents.html)中进行查询。

环境

  • Python 3.7.3

  • Matplotlib 3.1.3

常用链接

颜色 Colors

  • Choosing Colormaps in Matplotlib:

https://matplotlib.org/tutorials/colors/colormaps.html

  • List of Named Colors :

https://matplotlib.org/gallery/color/named_colors.html#sphx-glr-gallery-color-named-colors-py

  • HTML Color Picker:

https://www.w3schools.com/colors/colors_picker.asp?color=%23ffab00

  • Color Brewer 2.0:

https://colorbrewer2.org/#type=sequential&scheme=BuGn&n=3

  • How to find a color scheme that’s also useful when printed in black and white?

https://ux.stackexchange.com/questions/23876/how-to-find-a-color-scheme-thats-also-useful-when-printed-in-black-and-white

线样式

  • Linestyle - Line2D:

https://matplotlib.org/gallery/lines_bars_and_markers/linestyles.html#sphx-glr-gallery-lines-bars-and-markers-linestyles-py标记样式

  • Markers - Marker filling:

https://matplotlib.org/gallery/lines_bars_and_markers/marker_fillstyle_reference.html#sphx-glr-gallery-lines-bars-and-markers-marker-fillstyle-reference-py

刻度

  • Tick Locators - Tick Formatters:

https://matplotlib.org/gallery/ticks_and_spines/tick-locators.html#sphx-glr-gallery-ticks-and-spines-tick-locators-py

图例

  • Legend Guide:

https://matplotlib.org/3.1.1/tutorials/intermediate/legend_guide.html

正文

开始画图

import matplotlib.pyplot as plt  # 之后的代码默认引入此包

左右滑动查看更多

Figure 画板

创建一个简单的画板并展示:

fig, ax = plt.subplots()plt.show()  # 之后的代码默认省略此步骤

左右滑动查看更多

设定画板的长宽 figsize :

fig, ax = plt.subplots(figsize=(12, 3))

左右滑动查看更多

设定子图:

fig , ax = plt.subplots(nrows=3, ncols=5)

左右滑动查看更多

nrows 和 ncols 参数分别为行数和列数。更复杂的例子请参考官网教程:

https://matplotlib.org/gallery/subplots_axes_and_figures/gridspec_and_subplots.html#sphx-glr-gallery-subplots-axes-and-figures-gridspec-and-subplots-py

访问不同的字图,假设现在有三行五列:

ax[0, 4].plot(x, y, color='limegreen')ax[2, 2].plot(x, y, color='red')

左右滑动查看更多

紧凑布局 Tight Layout:

fig, ax = plt.subplots(tight_layout=True)

左右滑动查看更多

画板背景色:

ax.set_facecolor('lightblue')

左右滑动查看更多

图中图 Inset:

ax.plot(x, y, color='limegreen', label='Xovee')inset = plt.axes((.5, .5, .3, .3), facecolor='lightblue')inset.plot(x, y, color='red')

左右滑动查看更多

标签 Label

设定图片的轴标签、标题、字体颜色、字体大小:

  • plt.title()

  • plt.xlabel()plt.ylabel()

  • plt.set_title()

  • ax.set_xlabel()ax.set_ylabel()

ax.set_title("Xovee's Figure", fontsize=24, color='red')ax.set_xlabel('Xovee', fontsize=20, color='lightblue')ax.set_ylabel('Xovee', fontsize=20, color='coral')

左右滑动查看更多

轴 Axes/Axis

设定轴的范围:

ax.set_xlim(np.pi, 3*np.pi)ax.set_ylim(-.5, .5)

左右滑动查看更多

设定轴的缩放 Scale,可选项包括:

  • linear 默认

  • log

  • symlog

  • logit

fig, ax = plt.subplots(ncols=2, figsize=(8, 4), tight_layout=True)x = np.linspace(0, 100, 1000)y = [2**x_ for x_ in x]ax[0].plot(x, y, color='limegreen', label='Xovee')ax[1].plot(x, y, color='coral')ax[1].set_yscale('log')

左右滑动查看更多

设定轴的上下界、粗细、颜色:

ax.plot(x, y, color='limegreen', label='Xovee')ax.set_yticks([-.5, 0., .5])ax.set_xticks([2, 4, 6, 8])ax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)ax.spines['left'].set_bounds(-.5, .5)ax.spines['bottom'].set_bounds(2, 8)ax.spines['bottom'].set_linewidth(2)ax.spines['bottom'].set_color('red')

左右滑动查看更多

隐藏轴:

hide_axes = ['left', 'top', 'right', 'bottom']for axis in hide_axes:    ax.spines[axis].set_visible(False)

左右滑动查看更多

读者可以关注一下这个ax.spines,即轴的脊椎,将其可见度设为False

设定右(上)坐标轴:ax.twinx(),同理可以设置上坐标轴ax.twiny()

ax.plot(x, y, color='limegreen', label='Xovee')axr = ax.twinx()axr.set_yticks([.5])axr.set_yticklabels(['Xovee'])

左右滑动查看更多

Tick 刻度

设置刻度的长、宽、颜色:

# axis 默认是 both, 或者 x 和 y# which 可以是 major, minor, bothax.tick_params(axis='both', which='major', color='blue', length=10, width=3)

左右滑动查看更多

自定义刻度的位置和标签:

  • plt.xticks()plt.yticks()

  • ax.set_xticks() 和 ax.set_xticklabels()

  • ax.set_yticks() 和 ax.set_yticklabels()

import matplotlib.pyplot as pltimport numpy as npfig, ax = plt.subplots(tight_layout=True)x = np.linspace(0, 4*np.pi, 100)y = np.sin(x)plt.plot(x, y, color='limegreen', label='Xovee')plt.xticks([0, np.pi, 2*np.pi, 3*np.pi, 12], ['0.0', '$\pi$', '$2\pi$', '3$\pi$', '12'], fontsize=16, rotation=30, color='red')plt.yticks([-1, 0, 1], fontsize=16, color='blue')plt.show()

左右滑动查看更多

显示(隐藏)主/次刻度:右轴显示minor次刻度,下轴不显示minor次刻度。

ax.set_xticks([1e1, 1e2, 1e4], minor=True)ax.set_yticks([1e-4, 1e-2, 1e0], minor=False)

左右滑动查看更多

Legend 图例

设定图例位置和文字大小:loc的可选参数包括bestloweruppercenterleftright及其部分组合例如lower left

plt.legend(loc='lower center', fontsize=24)

左右滑动查看更多

设定图例位置:bbox_to_anchor参数的四元组,以左下角为参照,设定图例的位置:

plt.legend(loc='lower left', bbox_to_anchor=(0, 1.05, .5, 1.05),  fontsize=24)

左右滑动查看更多

多行多列图例、图例背景颜色:

legend = plt.legend(loc='lower left', ncol=3, fontsize=16)legend.get_frame().set_facecolor('linen')

左右滑动查看更多

网格 Grid

fig, ax = plt.subplots(ncols=3, tight_layout=True)x = np.linspace(0, 4*np.pi, 100)y = np.sin(x)ax[0].plot(x, y, color='limegreen', label='Xovee')ax[1].plot(x, y, color='red', label='Xovee')ax[2].plot(x, y, color='blue', label='Xovee')ax[0].grid(axis='x', linestyle='--')ax[1].grid(axis='y', linewidth=5)ax[2].grid(color='purple')

左右滑动查看更多

其他命令

减小生成的文件大小:添加rasterized=True参数。

plt.plot(x, y, rasterized=True)plt.scatter(x, y, rasterized=True)...

左右滑动查看更多

文字 Text:

ax.text(2, 0, 'Xovee Xu is watching you!!!', fontsize=12, weight='bold', color='Coral')

左右滑动查看更多

设定字体:

from matplotlib import rcParamsrcParams['font.family'] = 'Times New Roman'

左右滑动查看更多

设定层级 zorderzorder高的元素显示在zorder低低元素之上。

ax[0].scatter([0], [2], s=1e5)ax[0].scatter([0], [0], s=1e5, c='red')ax[1].scatter([0], [2], s=1e5, zorder=5)ax[1].scatter([0], [0], s=1e5, c='red', zorder=3)

左右滑动查看更多

透明 alpha:设定alpha参数,1为不透明,0为完全透明。

ax.scatter([0], [2], s=1e5, c='green', alpha=.5)ax.scatter([0], [0], s=1e5, c='yellow', alpha=.5)ax.scatter([-1], [1], s=3e4, c='red', zorder=0)ax.scatter([1], [1], s=3e4, c='blue', alpha=1.)

左右滑动查看更多

设置颜色地图:例一 colormap。各种colormap颜色参考值可以在这里找到。

fig, ax = plt.subplots(tight_layout=True)x = np.linspace(0, 4*np.pi, 100)y = np.sin(x)cmp = plt.cm.get_cmap('rainbow')for i in range(len(x)-1):    plt.plot([x[i], x[i+1]], [y[i], y[i+1]], linewidth=5, color=cmp(x[i]/max(x)))

左右滑动查看更多

设置颜色地图:例二 colormap

ax.scatter(x, y, s=x**2, c=y, cmap='rainbow')

左右滑动查看更多

打印出系统中支持的字体名:

import matplotlib.font_managera = sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])for i in a:    print(i)

左右滑动查看更多

Reference

Usage Guide. (Mar 20, 2020). Retrieved from :

https://matplotlib.org/tutorials/introductory/usage.html#sphx-glr-tutorials-introductory-usage-py

matplotlib官方文档pdf_Matplotlib知识相关推荐

  1. Matplotlib官方文档学习笔记 PART1-简介 C2-pyplot教程 (19-12-4 by-xieyuxin)

    第二章 pyplot教程 2.1 pyplot简介(Intro to pyplot) matplotlib.pyplot 是使 matplotlib 像 MATLAB 一样工作的命令样式函数的集合.每 ...

  2. 【Matplotlib】matplotlib.animation.FuncAnimation绘制动态图、交互式绘图汇总(附官方文档)

    文章目录 零.文中用到的相关知识: 一.以sin举例,motplotlib绘制动图 1.绘制sin函数 2.动态画出sin函数曲线 3.点在曲线上运动 4.点,坐标运动 二.单摆例子 1.scipy中 ...

  3. 如何快速掌握oracle,教你如何快速从 Oracle 官方文档中获取需要的知识

    以下链接可查看 11g 到 20c 的在线官方文档. https://docs.oracle.com/en/database/oracle/oracle-database/index.html 如图, ...

  4. oracle语法官方文档,Oracle官方文档必备语法知识

    很多Oracle DBA虽然接触Oracle时间很长,但是一旦想不起语法或找不出相应参数时,习惯百度或谷歌.虽然已经下载了官方文档,但是 Oracle官方文档必备语法知识 [日期:2015-04-21 ...

  5. matplotlib 常用图形绘制与官方文档

    matplotlib 常用图形绘制与官方文档 matplotlib.org Python库matplotlib 图形绘制 官方教程目录 matplotlib.pyplot matplotlib.pyp ...

  6. python数据科学和机器学习常用库的官方文档

    文章目录 Matplotlib Numpy Pandas sklearn sklearn_crfsuite SciPy Matplotlib 进入matplotlib官网地址:https://matp ...

  7. scikit-learn (sklearn) 官方文档中文版

    scikit-learn (sklearn) 官方文档中文版 sklearn 0.21.3 中文文档 sklearn 0.21.3 中文示例 sklearn 英文官网 介绍 sklearn (scik ...

  8. 教你如何阅读Oracle数据库官方文档

    < Ask Oracle官方原创 > Oracle 官方文档 数量庞大,而且往往没有侧重点,让oracle新手看起来很费力.但是,仍有很多Oracle使用者认为任何oracle学习资料都比 ...

  9. 每天一小时python官方文档学习(七)————模块与包

    6. 模块 模块是一个包含Python定义和语句的文件,实际上就是一个正常的.py文件.但是作用和普通需要运行的程序不一样,它实际上有点像函数.如果说函数实现了代码的重用,模块则是实现了函数的重用.我 ...

  10. clickhouse官方文档_clickhouse分析:结合grafana和metabase完成监控和数据分析

    点击上方蓝字关注我们 " 关于clickhouse的监控和可视化界面,想必刚接触到ch的人是一头雾水,大厂往往会给ch集群定制各种监控和可视化分析,普通用户就需要我们自己寻求现成的开源工具, ...

最新文章

  1. linux的临时页表映射问题
  2. 使用maven运行单元測试总结
  3. shell 练习题01:列出使用最多的命令是哪些并且将这些命令输入到chy1.txt中
  4. 基于MATLAB的TDOA算法的仿真
  5. hive把字符串转换为时间_关于hive的时间转换
  6. python绘图矩阵散点图_Python实践:seaborn的散点图矩阵(Pairs Plots)可视化数据
  7. jquery 取值 数值_jQuery – 使用正则表达式获取数据值
  8. [论文阅读] Active Class Incremental Learning for Imbalanced Datasets
  9. 人声处理_科唛课堂——人声的音频后期处理
  10. LeetCode 445. Add Two Numbers II
  11. linux文件名变量,文件名通配符、变量以及管道知识点的总结
  12. 2015年7月15日 JS第一课(JS,声明变量,数据类型)
  13. Unity Android 跳转拨号界面和一键加群
  14. php 银行卡二三四要素验证接口
  15. Haproxy配置应用文档
  16. 学习笔记——VMware网络桥接的几个问题(有配置问题的值得一看)
  17. 家用台式计算机需要安装的软件,新的电脑应该安装哪些应用?推荐这9个软件够你用一生!...
  18. 输入年份和天数计算出几月几号
  19. HTML+CSS+Javascript简易记账本(localStorage)
  20. com.monotype.android.font.ktoppo,Zawgyi Myanmar Fonts Free

热门文章

  1. iOS混排计算中英文个数,中午算一个字符,英文和符号算半个字符
  2. 多租户数据架构以及hibernate支持(Multi-TenantDataArchitecture)
  3. EMC CTO:IT进化到“以数据为核心”的阶段
  4. JAVA 7 正式版发布 新特性一览表
  5. J2EE项目架构最佳实践
  6. 话里话外:明白比智慧更重要
  7. 4.设计包(design package)
  8. 82. Session 应用
  9. 编程语言 - PHP
  10. Python3-问题整理