Matplotlib新手上路(上)

简介: matplotlib是python里用于绘图的专用包,功能十分强大。下面介绍一些最基本的用法: 一、最基本的划线 先来一个简单的示例,代码如下,已经加了注释: import matplotlib.

matplotlib是python里用于绘图的专用包,功能十分强大。下面介绍一些最基本的用法:

一、最基本的划线

先来一个简单的示例,代码如下,已经加了注释:

import matplotlib.pyplot as plt
import numpy as np

# 先获取一个图表
plt.figure()

# 设置图表的标题
plt.title("sale report")

# 设置y轴的label标签
plt.ylabel("amount")

# 设置x轴的label标签
plt.xlabel("month")

# 模拟一些(X,Y)坐标数据(注:习惯上用大写表示矩阵)
X = np.arange(0, 13)
Y = np.array([100, 200, 200, 300, 400, 600, 500, 550, 600, 700, 800, 750, 800])

# 将x轴的刻度范围限制为-0.5~12.2
plt.xlim(-0.5, 12.2)

# 将y轴的刻度范围限制为0~1000
plt.ylim(0, 1000)

# 将(X,Y)坐标用red红色画线
plt.plot(X, Y, 'r')

# X坐标也可以省略,只要Y轴的坐标值即可,--表示是虚线
plt.plot(Y + 50, '--')

# g+表示green绿色,画图的样式为+号
plt.plot(Y - 50, 'g+')

# 同时划二条线,第1个是yellow黄色,第2个是magenta色,另外还设置了样式1
plt.plot(Y - 100, 'y', Y - 150, 'm1')

# 渲染出来
plt.show()

注:plt中有很多缩写,比如r代表red,y代表yellow,xlim即x-axis-limit(x轴的限制),另外g+,表示颜色是green,而后面的+号表示划线的样式。从源码中可以找到更多的缩写说明。 matplotlib/axes/_axes.py 在这个文件中,plot方法的注释里有相关描述:

 1 The following format string characters are accepted to control
 2 the line style or marker:
 3 
 4 ================    ===============================
 5 character           description
 6 ================    ===============================
 7 ``'-'``             solid line style
 8 ``'--'``            dashed line style
 9 ``'-.'``            dash-dot line style
10 ``':'``             dotted line style
11 ``'.'``             point marker
12 ``','``             pixel marker
13 ``'o'``             circle marker
14 ``'v'``             triangle_down marker
15 ``'^'``             triangle_up marker
16 ``'<'``             triangle_left marker
17 ``'>'``             triangle_right marker
18 ``'1'``             tri_down marker
19 ``'2'``             tri_up marker
20 ``'3'``             tri_left marker
21 ``'4'``             tri_right marker
22 ``'s'``             square marker
23 ``'p'``             pentagon marker
24 ``'*'``             star marker
25 ``'h'``             hexagon1 marker
26 ``'H'``             hexagon2 marker
27 ``'+'``             plus marker
28 ``'x'``             x marker
29 ``'D'``             diamond marker
30 ``'d'``             thin_diamond marker
31 ``'|'``             vline marker
32 ``'_'``             hline marker
33 ================    ===============================
34 
35 
36 The following color abbreviations are supported:
37 
38 ==========  ========
39 character   color
40 ==========  ========
41 'b'         blue
42 'g'         green
43 'r'         red
44 'c'         cyan
45 'm'         magenta
46 'y'         yellow
47 'k'         black
48 'w'         white
49 ==========  ========
View Code

 

二、绘制数学函数

下面是抛物线、直线、三角函数的演示:

import matplotlib.pyplot as plt
import numpy as np

# 先获取一个图表
fig = plt.figure()

# 抛物线
X1 = np.linspace(-5, 5, 50)  # -5 ~ 5 之间生成50个点
Y1 = X1 ** 2 + 5
plt.plot(X1, Y1, 'r')
# plt.plot(X1, Y1, color='red', label='parabola')

# 三角函数
X2 = np.linspace(np.pi, 5 * np.pi, 50)  # 在pi ~ 5pi之间生成50个点
Y2 = 6 * np.cos(X2)
plt.plot(X2, Y2, 'y')
# plt.plot(X2, Y2, color='y', label='cosine')

# 直线
X3 = np.linspace(-4, 6, 20)
Y3 = 3 * X3 + 10
plt.plot(X3, Y3, 'g--')
# plt.plot(X3, Y3, color='green', linestyle='--', label='line')

# 显示图例说明
# plt.legend()

# 渲染出来
plt.show()

注意:代码中有一些行被注释掉了,比如:plt.plot(X1, Y1, color='red', label='parabola') ,这其实是 plt.plot(X1, Y1, 'r') 的完整写法,其中label只有完整写法中才能指定。换成完整写法后,同时把plt.legend() 前面的注释去掉,再次运行图上就会显示出所谓的"图例"

 

三、坐标轴控制、文本注解显示

先看效果图:

代码如下:

# coding:utf8

import matplotlib.pyplot as plt
import numpy as np

# 先获取一个图表
fig = plt.figure()

# 设置x,y坐标轴的刻度显示范围
plt.xlim(-7, 7)
plt.ylim(0, 7)

# 抛物线
X1 = np.linspace(-5, 5, 50)  # -5 ~ 5 之间生成50个点
Y1 = 0.25 * X1 ** 2
plt.plot(X1, Y1, color='red', label=r'$y=\frac{x^2}{4}$')

# 直线
X2 = np.linspace(-5, 5, 50)
Y2 = X2
plt.plot(X2, Y2, color='green', linestyle='--', label=r'$y=x$')

# 黑色辅助线
plt.plot([4, 4], [4, 0], "k--")
# 抛物线与直线的交点处,标记1个黑点
plt.plot([4, 4], [4, 4], 'ko')

# 交点处的文本(annotate方式)
plt.annotate(r'$y=\frac{4^2}{4}=4$',
             xy=(4, 4),
             xycoords='data',
             xytext=(+10, -30),
             textcoords='offset points',
             fontsize=12,
             color="red",
             arrowprops=dict(arrowstyle="->",
                             color="red",
                             connectionstyle="arc3,rad=.5"))
# text方式的文本
plt.text(5.2, 6.1, r'$y=\frac{x^2}{4}$', fontdict={'size': 16, 'color': 'r'})
plt.text(5.2, 5.1, r'$y=x$', fontdict={'size': 16, 'color': 'g'})

# 获取当前坐标轴gca即get current axis
ax = plt.gca()

# 去掉上、右二侧的边框线
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')

# 将左侧的y轴,移到x=0的位置
ax.spines['left'].set_position(('data', 0))

# 调整x轴刻度(从-5到+5,正好11个点)
plt.xticks(np.linspace(-5, 5, 11))
# 调整y轴刻度
plt.yticks(np.linspace(1, 6, 6))

# 给坐标轴加箭头
plt.arrow(0, 7, 0, 0, width=0.2, color="k", clip_on=False, head_width=0.2, head_length=0.2)
plt.arrow(7, 0, 0.01, 0, width=0.2, color="k", clip_on=False, head_width=0.2, head_length=0.2)

# 显示图例说明
plt.legend()

# 显示
plt.show()

  

三、散点图

# coding:utf8

import matplotlib.pyplot as plt

# 先获取一个图表
fig = plt.figure()

# 设置x,y坐标轴的刻度显示范围
plt.xlim(-5, 20)
plt.ylim(-5, 30)

# 画散点图
X1 = [0, 10]
Y1 = [10, 20]
# c即color , s即scale
plt.scatter(X1, Y1, c='r', s=80, label='scatter 1')
plt.scatter([10, 15], [5, 10], c='g', label='scatter 2')

# 显示网格
plt.grid(True, alpha=0.3)

# 加上坐标说明
plt.text(0.5, 10.5, r'$(0,10)$')
plt.text(10.5, 20.5, r'$(10,20)$')
plt.text(10.5, 5.5, r'$(10,5)$')
plt.text(15.5, 10.5, r'$(15,10)$')

# 显示图例说明
plt.legend()

# 显示
plt.show()

  

参考文章:

1、Matplotlib tutorial 

2、Matplotlib tutorial (中文翻译)

3、Matplotlib Gallery (官网)

4、基于官方教程的matplotlib简介

5、官网pyplot教程

6、莫烦的视频

7、matplotlib常用公式

作者: 菩提树下的杨过
出处: http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
目录
相关文章
|
4月前
|
敏捷开发 人工智能 数据可视化
从方法到工具:一文教会你用GTD工作法高效管理时间
在知识经济时代,GTD(Getting Things Done)时间管理理念成为提升效率的核心方法。本文深度解析GTD五步法(收集、处理、组织、回顾、执行),并测评7款主流工具(OmniFocus、Notion、板栗看板等),针对个人、中小团队及企业级用户需求提供选型建议。通过方法论与工具结合,助力实现高效任务管理与目标达成。
|
11月前
|
API
车牌号归属地查询免费API接口教程
本接口用于根据车牌号查询社会车辆的归属地,不支持军车、使馆等特殊车牌。请求地址为 `https://cn.apihz.cn/api/other/chepai.php`,支持 POST 和 GET 请求。请求参数包括 `id`、`key` 和 `words`,返回数据包含车牌归属地信息。示例请求:`https://cn.apihz.cn/api/other/chepai.php?id=88888888&key=88888888&words=川B1234`。
394 21
|
人工智能
AI大模型初体验
为了实现真正的A,需不断学习以提升能力。
289 3
AI大模型初体验
|
安全 Android开发 数据安全/隐私保护
探索Android 12的新特性:用户体验与隐私保护的革新
【7月更文挑战第7天】随着技术的不断进步,用户对手机操作系统的期望也日益增长。本文将深入分析Android 12带来的创新特性,特别是其如何通过重新设计的用户界面和增强的隐私功能提升整体体验,并探讨这些变化如何影响开发者和用户的互动模式。
|
11月前
|
存储 供应链 安全
探索区块链技术的未来——去中心化应用的崛起
探索区块链技术的未来——去中心化应用的崛起
316 13
|
11月前
|
机器学习/深度学习 人工智能 运维
智能化运维:从被动响应到主动预防####
【10月更文挑战第29天】 本文探讨智能化运维(AIOps)如何通过融合大数据、机器学习与自动化技术,推动IT运维管理从传统的被动响应模式向主动预防机制转变。不同于传统摘要概述全文内容的方式,本文摘要旨在直接揭示智能化运维的核心价值——利用智能算法预测潜在故障,减少系统停机时间,提升运维效率与服务质量,同时强调其在现代企业IT架构中的关键作用。 ####
290 9
|
11月前
|
缓存 安全 数据安全/隐私保护
「小邓观点」分享几种常见的账户锁定原因
下期小邓将与大家分享账户锁定的解决方案。如果您有账户锁定方面的困扰,敬请期待!
638 4
|
12月前
|
存储 人工智能 运维
阿里云AI基础设施产品力全球第二
国际研究和咨询公司 Forrester 发布最新全球AI基础设施解决方案研究报告《The Forrester Wave™: AI Infrastructure Solutions, Q1 2024》,阿里云凭借领先的产品性能,获评AI基础设施服务产品力全球第二。
|
12月前
excel 百分位函数 学习
excel 百分位函数 学习
356 1