matplotlib基本绘图

1. 水平、垂直线

from matplotlib import pyplot as plt

# 绘制垂直线
# vval:x轴坐标值, 可以给数组, 绘制多条
# ymin:垂直线最小值, 可以给数组
# ymax:垂直线最大值, 可以给数组
plt.vlines(vval, ymin, ymax)

# 绘制水平线
plt.hlines(xval, xmin, xmax)

2. 设置线型、线宽、颜色

# linestyle:线型 【"-", "--", ":", ".-"】
# linewidth:线宽 
# color:颜色:英文颜色单词、常见颜色英文单词首字母、#495434、或(255, 201, 204)、或(1, 1, 1, 1)最后的1代表透明度
# alpha:线条透明度:浮点值
plt.plot(xs, ys, linestyle='', linewidth=1, color='', alpha=0.5)

3. 设置坐标轴范围

  • 可以控制显示图形的某一部分
# x_limit_min:		<float>  x轴范围最小值
# x_limit_max:		<float>  x轴范围最大值
plt.xlim(x_limit_min, x_limit_max)

# y_limit_min:		<float>  y轴范围最小值
# y_limit_max:		<float>  y轴范围最大值
plt.ylim(y_limit_min, y_limit_max)

4. 设置坐标刻度及文本

# x_val_list: x轴刻度值序列
# x_test_list: x轴刻度标签文本序列【可选】
plt.xticks(x_val_list, x_test_list)

# y_val_list: y轴刻度值序列
# y_test_list: y轴刻度标签文本序列【可选】
plt.yticks(y_val_list, y_test_list)

5. 坐标刻度及文本特殊用法

  • laTex排版语法字符串
  • laTex标志 r原生字符关闭转义, $符开始, $符结束
r'$x^n+y^n=z^n$', r'$\int\frac{1}{x} dx = \ In |x| + C$', r'$-\frac{\pi}{2}$'

x n + y n = z n x^n+y^n=z^n xn+yn=zn

∫ 1 x d x =   I n ∣ x ∣ + C \int\frac{1}{x} dx = \ In |x| + C x1dx= Inx+C

− π 2 -\frac{\pi}{2} 2π
在这里插入图片描述
在这里插入图片描述

6. 设置坐标轴

  • 坐标轴名:left / right / bottom / top
# 获取当前坐标轴字典, {"left": 左轴, "right": 右轴, "bottom": 下轴, "top": 上轴}

ax = plt.gca()
# 获取其中某个坐标轴
axis = ax.spinex['坐标轴名']
# 设置坐标轴位置, 该方法需要传入2个元素作为参数
# type: <str> 移动坐标轴的参照类型  一般为 "data" (以数据的值作为移动参照物)
# val: 参照值
axis.set_position(('data', val))
# color: <str> 颜色字符串 'none' 透明
axis.set_color(color)
  • 案例:设置坐标轴至中心
import numpy as np
from matplotlib import pyplot as plt


# 绘制一条正弦曲线
# 从-Π到Π取1000个点
x = np.linspace(-np.pi, np.pi, 1000)
print(x.shape)

# 矢量化的sin方法将返回每个x对应的y
sinx = np.sin(x)
# 绘制一条余弦曲线
cosx = np.cos(x) / 2

# 绘制刻度
# plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi],
#            ['-Π', '-Π/2', '0', 'Π/2', 'Π'])
# 使用latex印刷排版处理数学公式,使其显示更加美观
plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi],
           [r'$-\pi$', r'$-\frac{\pi}{2}$', '0', r'$\frac{\pi}{2}$', r'$\pi$'])

plt.yticks([-1.0, -0.5, 0, 0.5, 1])

# 设置坐标轴
ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))

plt.plot(x, sinx)
plt.plot(x, cosx)
plt.show()

在这里插入图片描述

7. 图例

# label: <关键字参数 str> 支持LaTex排版语法字符串
plt.plot(xarray, yarray, ...., label="", ....)
# loc: 设置图例位置
"""
'best'			0		最合适
'upper right'   1		右上
'upper left'    2		左上
'lower left'	3		左下
'lower right'	4		右下
'right'			5		右
'center left'	6		左中
'center right'	7		右中
'lower center'	8		中下
'upper center'	9		中上
'center'		10		中
"""
plt.legend(loc='')
  • 构建十字坐标系
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from matplotlib import pyplot as plt


ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')

# 根据自己定义的坐标刻度来移动横纵坐标交汇点
# plt.xticks([-1.0, -0.5, 0, 0.5, 1])
# plt.yticks([-1.0, -0.5, 0, 0.5, 1])
# 使x轴交汇点为0
# ax.spines['bottom'].set_position(('data', 0))
# 使y轴交汇点为0
# ax.spines['left'].set_position(('data', 0))

# 根据系统生成的坐标轴将交汇点至于坐标平面中心
ax.spines['bottom'].set_position('center')
ax.spines['left'].set_position('center')

plt.show()

在这里插入图片描述

8. 特殊点

# xarray:<序列> 所有需要标注点的水平坐标组成的序列
# yarray:<序列> 所有需要标注点的垂直坐标组成的序列
plt.scatter(xarray, yarray,
			marker='',	# 点型 ~matplotlib.markers
			s='',		# 大小
			edgecolor='',	# 边缘色
			facecolor='',	# 填充色
			zorder=3,		# 绘制图层编号(编号越大,图层越靠上, 即点在线上方)
			label='',		# 如果有图例,会和图例显示在一起,可选
			)

  • 绘制当 x = 3π / 4 时两条曲线上的特殊点
import numpy as np
from matplotlib import pyplot as plt


# 绘制一条正弦曲线
# 从-Π到Π取1000个点
x = np.linspace(-np.pi, np.pi, 1000)
print(x.shape)

# 矢量化的sin方法将返回每个x对应的y
sinx = np.sin(x)
# 绘制一条余弦曲线
cosx = np.cos(x) / 2

# 绘制刻度
# plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi],
#            ['-Π', '-Π/2', '0', 'Π/2', 'Π'])
# 使用latex印刷排版处理数学公式,使其显示更加美观
plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi],
           [r'$-\pi$', r'$-\frac{\pi}{2}$', '0', r'$\frac{\pi}{2}$', r'$\pi$'])

plt.yticks([-1.0, -0.5, 0, 0.5, 1])

# 设置坐标轴
ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))

# 绘制特殊点
px = [3 / 4 * np.pi, 3 / 4 * np.pi]
py = [np.sin(px[0]), np.cos(px[0]) / 2]
plt.scatter(px, py, marker='o', s=70, edgecolor='red',
            facecolor='orange', zorder=3, label='Points')

plt.plot(x, sinx)
plt.plot(x, cosx)
plt.show()

在这里插入图片描述

  • marker可选项
    在这里插入图片描述

9. 备注

# 在图表中为某个点添加备注,包含备注文本,备注箭头等图像的设置
plt.annotate(
	r'$\frac{\pi}{2}$',		# 备注文本内容
	xycoords='data',		# 备注目标点所使用的坐标系(data表示数据坐标系)
	xy=(x, y),				# 备注目标坐标点
	textcoords='offset points', 	# 备注文本所使用的坐标系(offset points表示参照点的偏移坐标系)
	xytext=(x, y),			# 备注文本的坐标,参照为备注点坐标
	fontsize=14,			# 备注文本的字体大小
	arrowprops=dict()		# 使用字典定义文本指向目标带你的箭头样式 
)
  • arrowprops参数使用字典定义指向目标点的箭头样式
# arrowprops字典参数的常用key
arrowprops = dict(
	arrowstyle='',			# 定义箭头样式
	connectionstyle=''		# 定义连接线的样式
)
  • 箭头样式 (arrowstyle) 字符串如下
'-'		None
'->'	head_length=0.4, head_width=0.2
'-['	widthB=1.0, lengthB=0.2, angleB=None
'|-|'	widthA=1.0, widthB=1.0
'-|>'	head_length=0.4, head_width=0.2
'<-'	head_length=0.4, head_width=0.2
'<->'	head_length=0.4, head_width=0.2
'<|-'	head_length=0.4, head_width=0.2
'<|-|>'	head_length=0.4, head_width=0.2
'fancy'	head_length=0.4, head_width=0.4, tail_width=0.4
'simple'	head_length=0.5, head_width=0.5, tail_width=0.2
  • 连接线样式 (connectionstyle) 字符串样式
'angle'		angleA=90, angleB=0, rad=0.0
'angle3'	angleA=90, angleB=0
'arc'		angleA=0, angleB=0, armA=None, armB=None, rad=0.0
'arc3'		rad=0.0
'bar'		armA=0.0, armB=0.0, fraction=0.3, angle=None
  • 为特殊点添加备注
import numpy as np
from matplotlib import pyplot as plt


# 绘制一条正弦曲线
# 从-Π到Π取1000个点
x = np.linspace(-np.pi, np.pi, 1000)
print(x.shape)

# 矢量化的sin方法将返回每个x对应的y
sinx = np.sin(x)
# 绘制一条余弦曲线
cosx = np.cos(x) / 2

# 绘制刻度
# plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi],
#            ['-Π', '-Π/2', '0', 'Π/2', 'Π'])
# 使用latex印刷排版处理数学公式,使其显示更加美观
plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi],
           [r'$-\pi$', r'$-\frac{\pi}{2}$', '0', r'$\frac{\pi}{2}$', r'$\pi$'])

plt.yticks([-1.0, -0.5, 0, 0.5, 1])

# 设置坐标轴
ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))

# 绘制特殊点
px = [3 / 4 * np.pi, 3 / 4 * np.pi]
py = [np.sin(px[0]), np.cos(px[0]) / 2]
plt.scatter(px, py, marker='o', s=70, edgecolor='red',
            facecolor='orange', zorder=3, label='Points')

# 为特殊点添加备注
plt.annotate(r'$[\frac{3\pi}{4}, \frac{cos(\frac{3\pi}{4})}{2}]$',
             xycoords='data', xy=(3 / 4 * np.pi, np.cos(px[0]) / 2),
             textcoords='offset points', xytext=(-100, -60),
             fontsize=14,
             arrowprops=dict(
                arrowstyle='-|>',
                connectionstyle='arc3'
             ))

plt.plot(x, sinx)
plt.plot(x, cosx)
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值