文章目录

  • Matplotlib第一个简单的图形
  • 坐标轴控制,标题
  • 打上文字标注,公式
  • 一个图中画多张子图
  • 大小不一的多张子图
  • 散点图
  • 柱状图
  • plt.rcParams参数设置
  • 详细颜色字母对照表
  • 参考资料

Matplotlib 是 Python 中最常用的一个绘图库,主要用于绘制各种图形,包括散点图、柱状图、3D图、等高线图等等。在做研究过程中肯定会经常用,本文做一个简单的入门介绍,也给出极佳的参考手册,以备查用。内容主要参考了[1]的内容,我自己用jupyter notebook实现了一遍,我会给出所有源码的文件。

重点推荐:https://matplotlib.org/gallery.html
该网页中收录了大量Matplotlib图形实例源码,基本上按需找到适当修改一下就行了,很棒!

除了Matplotlib之外再推荐一个高级统计画图工具:seaborn: statistical data visualization

Matplotlib第一个简单的图形

%matplotlib inline
import numpy as np
import matplotlib.pyplot as pltplt.figure(0)
X = np.random.normal(size=(12, 2))
#plt.scatter(X[:, 0], X[:, 1])
plt.plot(X[:,0],X[:,1],'mo') #m表示紫色,o表示小圆点,更多颜色见文末
plt.show()

坐标轴控制,标题

# create a new figure
plt.figure(1)
x = np.linspace(0, 2 * np.pi, 50)
y = np.sin(x)
plt.plot(x, y,label="sin(x)")
plt.plot(x, y * 2,label="2sin(x)")
plt.title("sin(x) & 2sin(x)") # 图像上方的标题
plt.xlim((0, np.pi*2)) # 横坐标的数值范围
plt.ylim((-3, 3)) # 纵坐标的数值范围
plt.xticks(np.linspace(0,np.pi*2,5)) # 认为指定在坐标轴上显示什么数字,我用linspace来画出5个值
#plt.xticks((0, np.pi * 0.5, np.pi, np.pi * 1.5, np.pi * 2))
plt.xlabel('XXX')  # 标记横轴坐标名称
plt.ylabel('YYY')  # 标记纵轴坐标名称
plt.legend(loc='upper right') # 标记标签,loc属性表示标签的位置,不写loc的话就是默认best,其他见下文
plt.show()


legend loc参数选项:

颜色 表示方式
蓝色 b
绿色 g
红色 r
青色 c
品红 m
黄色 y
黑色 k
白色 w

点的类型 表示方式
点 .
像素 ,
圆 o
方形 s
三角形 ^

线的类型 表示方式
直线 -
虚线 –
点线 :
点划线 -

打上文字标注,公式

有时候我们需要对特定的点进行标注,我们可以使用 plt.annotate 函数来实现。这里我们要标注的点是(x0, y0) = (π, 0)。我们也可以使用 plt.text 函数来添加注释。

plt.plot(x, y)x0 = np.pi
y0 = 0# 画出标注点
plt.scatter(x0, y0, s=50)plt.annotate('sin($\pi$)=%s' % y0, xy=(np.pi, 0), xycoords='data', xytext=(+30, -30),textcoords='offset points', fontsize=16,arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2"))plt.text(0.5, -0.25, "$TEXTsin(\pi)=0$", fontdict={'size': 16, 'color': 'r'})plt.show()

代码中的$\pi$是公式,参考latex公式去写就行了,很方便

对于 annotate 函数的参数,做一个简单解释:
‘sin(np.pi)=%s’ % y0 代表标注的内容,可以通过字符串 %s 将 y0 的值传入字符串;
参数xycoords='data’是说基于数据的值来选位置;
xytext=(+30, -30) 和textcoords='offset points’表示对于标注位置的描述 和 xy 偏差值,即标注位置是 xy 位置向右移动 30,向下移动30;
arrowprops 是对图中箭头类型和箭头弧度的设置,需要用 dict 形式传入。

一个图中画多张子图

有时候我们需要将多张子图展示在一起,可以使用 subplot() 实现。即在调用 plot() 函数之前需要先调用 subplot() 函数。该函数的第一个参数代表子图的总行数,第二个参数代表子图的总列数,第三个参数代表活跃区域。

plt.figure(2)
ax1 = plt.subplot(2, 2, 1) # (行,列,活跃区)
plt.plot(x, np.sin(x), 'r+')ax2 = plt.subplot(2, 2, 2) # 独立的y轴
plt.plot(x, 2 * np.sin(x), 'go')ax3 = plt.subplot(2, 2, 3)
plt.plot(x, np.cos(x), '-b')ax4 = plt.subplot(2, 2, 4, sharey=ax3) # 与 ax3 共享y轴
plt.plot(x, 2 * np.cos(x), 'y.')plt.show()

上面的 subplot(2, 2, x) 表示将图像窗口分为 2 行 2 列。x 表示当前子图所在的活跃区。

大小不一的多张子图

可以看到,上面的每个子图的大小都是一样的。有时候我们需要不同大小的子图。比如将上面第一张子图完全放置在第一行,其他的子图都放在第二行。

plt.figure(3)
ax1 = plt.subplot(2, 1, 1) # (行,列,活跃区)
plt.plot(x, np.sin(x), '-r+')ax2 = plt.subplot(2, 3, 4)
plt.plot(x, 2 * np.sin(x), 'g')ax3 = plt.subplot(2, 3, 5, sharey=ax2)
plt.plot(x, np.cos(x), 'b')ax4 = plt.subplot(2, 3, 6, sharey=ax2)
plt.plot(x, 2 * np.cos(x), 'y')plt.show()

散点图

画一个炫炫的散点图:

k = 500
x = np.random.rand(k)
y = np.random.rand(k)
size = np.random.rand(k) * 50 # 生成每个点的大小
colour = np.arctan2(y, x) # 生成每个点的颜色大小
plt.scatter(x, y, s=size, c=colour)
plt.colorbar() # 添加颜色栏plt.show()

柱状图

常用的柱状图:

k = 10
x = np.arange(k)
y = np.random.rand(k)
plt.bar(x, y) # 画出 x 和 y 的柱状图# 增加数值
for x, y in zip(x, y):plt.text(x, y , '%.2f' % y, ha='center', va='bottom')plt.show()

plt.rcParams参数设置

plt(matplotlib.pyplot)使用rc配置文件来自定义图形的各种默认属性,称之为rc配置或rc参数。
通过rc参数可以修改默认的属性,包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等。rc参数存储在字典变量中,通过字典的方式进行访问。[2]

详细颜色字母对照表

参考资料

[1] https://www.jianshu.com/p/c41ac57cea33
[2] https://blog.csdn.net/weixin_39010770/article/details/88200298
[3] Matplotlib可视化及应用
[4] https://matplotlib.org/gallery.html

Python Matplotlib画图基础介绍相关推荐

  1. python画图中文显示_解决Linux系统中python matplotlib画图的中文显示问题

    最近想学习一些python数据分析的内容,就弄了个爬虫爬取了一些数据,并打算用Anaconda一套的工具(pandas, numpy, scipy, matplotlib, jupyter)等进行一些 ...

  2. python matplotlib画图产生的Type 3 fonts字体没有嵌入问题

    ScholarOne's 对python matplotlib画图产生的Type 3 fonts字体不兼容,更改措施: 在程序中添加如下语句 import matplotlib matplotlib. ...

  3. Python matplotlib画图出现No handles with labels found to put in legend

    1.在使用Python matplotlib画图出现No handles with labels found to put in legend ,在本地调试时并不会出现这个错误,而部署到线上服务器之后 ...

  4. 解决Linux系统中python matplotlib画图的中文显示问题

    解决Linux系统中python matplotlib画图的中文显示问题 参考文章: (1)解决Linux系统中python matplotlib画图的中文显示问题 (2)https://www.cn ...

  5. python word保存图_使用python matplotlib 画图导入到word中如何保证分辨率

    在写论文时,如果是菜鸟级别,可能不会花太多时间去学latex,直接用word去写,但是这有一个问题,当我们用其他工具画完实验彩色图时,放到word中会有比较模糊,这有两个原因导致的. 原因一:图片导入 ...

  6. python画图模糊_使用python matplotlib 画图导入到word中如何保证分辨率

    在写论文时,如果是菜鸟级别,可能不会花太多时间去学latex,直接用word去写,但是这有一个问题,当我们用其他工具画完实验彩色图时,放到word中会有比较模糊,这有两个原因导致的. 原因一:图片导入 ...

  7. python matplotlib 画图 不显示中文 中文乱码 设置中文字体

    在使用python matplotlib 画图时,由于matplotlib 默认是使用DejaVu Sans这种字体,不支持中文,所以我们在使用matplotlib画图包含中文内容要显示时就会变成方框 ...

  8. Python matplotlib 画图 显示中文 中文乱码 无法显示负号

    Python matplotlib 画图 显示中文 中文乱码 无法显示负号 import matplotlib.pyplot as pltplt.rcParams["font.sans-se ...

  9. 环境搭建:使用python matplotlib画图不显示中文问题解决

    1.背景 python matplotlib.plt 使用 plt.title 写标题时,标题显示为方框,无法正常显示中文,而且基本上在一台新的服务器上配置python开发环境都会遇到这种问题,因此写 ...

最新文章

  1. php获取数组中,相同键名的键值之和
  2. 学python可以做什么副业-写代码做副业月入10K的方法都藏在这几个公众号里!
  3. Tomcat提示Null component
  4. Java代码块回调,QueueEvent - 队列化执行线程和代码块
  5. springboot启动太慢优化
  6. 离线安装python环境
  7. Google发转码工具 可将安卓程序转至iOS
  8. java快捷键设置sop,今日工作总结|sop整理
  9. cvtcolor函数_5 OpenCV几个函数操作实例
  10. php漂浮广告代码,js 居中漂浮广告_广告代码
  11. mysql 分库备份_如何分表分库备份及批量恢复?MySQL
  12. AndroidQQ登录
  13. 保险行业CRM客户关系管理系统解决方案
  14. Android平板能装fydeos,在 FydeOS 中如何安装安卓应用 - FydeOS 帮助手册
  15. html页中加入数学公式,Html+Css+JavaScript实现网页公式编辑器(一)
  16. ArcGIS基础实验操作100例--实验3旋转矢量要素
  17. java方法6_6 Java 方法
  18. vivos7e和OPPOK7x 的区别 哪个更值得入手
  19. 看看MapleSim中的建模元件有哪些
  20. k2p一直亮红灯搜不到信号_苹果手机音量小,别怪信号不好,关闭这个功能,声音瞬间变大...

热门文章

  1. 微信小程序HTTPS证书部署案例
  2. CodeForces--ZeptoLab Code Rush 2015 (我参加的第一场cf比赛)
  3. 杰理之GPIO汇总【篇】
  4. 计算机软考网络工程师难度大吗,国家软考的网络工程师与CCNP相比,哪个难?...
  5. supervisor中使用虚拟环境
  6. 阻碍NFT进一步发展的绊脚石都有哪些?从6个方面切入分析
  7. 活字印刷引入简单工厂模式
  8. 7-209 sdut-C语言实验-数位数7-210 sdut-C语言实验-小树快长高
  9. 知心王姐小饭桌 IM消息应用开发:一看看懂Protocol Buffer(协议篇)
  10. 我是梦想橡皮擦,这是我在 CSDN 所有博客系列的清单(2022年3月22日更新)