matplotlib之绘制正余弦曲线并修饰

本文介绍了如何使用matplotlib库在Python中绘制正余弦曲线,包括设置线型、线宽、颜色和标签,以及调整坐标范围、自定义坐标刻度、添加坐标轴和特殊点标注等详细步骤。通过示例代码展示了完整的绘图过程,同时添加了特殊点的注释,帮助理解图像关键点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

matplotlib之绘制正余弦曲线

绘制正余弦曲线

  绘制正弦曲线,需要用到numpy函数,生成对应的x-y值,如下代码,可以绘制出基本的正余弦曲线,曲线的线性,线宽,颜色等设置,均是在plot函数内设置的。linestyle设置线型,linewidth设置线宽,color设置颜色,而lable则添加标签。绘制效果如图,接下来借这两条曲线,再说一下其他的设置。

import numpy as np
import matplotlib.pyplot as mp

# [-π,π] 拆1000个点
x = np.linspace(-np.pi, np.pi, 1000)
sin_x = np.sin(x)
# 绘制余弦曲线 y=1/2 * cos(x)
cos_x = np.cos(x) / 2
# 绘图
mp.plot(x, sin_x, linestyle='--', linewidth=2, 
		color='dodgerblue', alpha=0.9,
		label=r'$y=sin(x)$')
mp.plot(x, cos_x, linestyle=':', linewidth=3,
	    color='orangered', alpha=0.9,
	    label=r'$y=\frac{1}{2}cos(x)$')

在这里插入图片描述

修改可视范围

  如图,可以根据需要选择可视范围。只要加上下面的xlim和ylim即可根据需要调整。

# mp.xlim(0, np.pi)
# mp.ylim(0, 1)

在这里插入图片描述

修改坐标刻度

  如图:相比于第一幅图自动生成的刻度,可以自己按照自己需要的来定义刻度,定义刻度的函数是xticks和yticks,如果不定义刻度,很多时候画出来的图像会变形,尤其是x和y的刻度相差很大时,很容易出现严重变形。

x_val_list=[-np.pi, -np.pi/2, 0, np.pi/2, np.pi]
x_text_list=['-π', r'$-\frac{\pi}{2}$', '0', 
			 r'$\frac{π}{2}$', 'π']
mp.xticks(x_val_list, x_text_list)
mp.yticks([-1, -0.5, 0.5, 1], 
	      ['-1', '-0.5', '0.5', '1'])

在这里插入图片描述

设置坐标轴

  可以看见,matplotlib自动生成的图像,是没有一个合适的坐标系的,因此来给它加个坐标系。获取当前坐标轴mp.gca(), 修改坐标轴的颜色 axis.set_color(‘none’),移动坐标轴的位置 ,data: 基于数据坐标系进行定位 0: 把坐标轴移动到0的位置。

ax = mp.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))

在这里插入图片描述

绘制两个特殊点

  scatter函数是绘制点的专用函数,如图,利用scatter函数在图像的(0,π/2)和(π/2,1)绘制了两个点,其中绘制点也需要设置。

mp.scatter(
	xarray, yarray,  # 给出点的坐标
    marker='',		 # 点型  'D'  's'  'o' ...
    s = 60,			 # 点的大小
    edgecolor='',	 # 边缘色
    facecolor='',	 # 填充色
    zorder=3		 # 绘制图层编号 (编号越大,图层越靠上)
)
mp.scatter([np.pi/2, np.pi/2], [0, 1], marker='X', s=80, edgecolor='dodgerblue',facecolor='deepskyblue', zorder=3)

在这里插入图片描述

为点添加备注

  如图,利用annotate为图像添加备注,具体参数含义如下。

mp.annotate(
	r'$[x, y]$', 		# 备注的文本内容
    xycoords='data',	# 目标点的坐标系
    xy=(1, 2),			# 目标点的坐标
    # 定位备注文本位置所使用的坐标系
    textcoords='offset points',	
    xytext=(-10, -10),	# 备注文本的坐标
    fontsize=12,		# 字体大小
    # 箭头属性字典
    arrowprops=dict(
    	arrowstyle : '->',			# 箭头样式
        connectionstyle='angle3'	# 连接线的样式
    )
)
ap = dict(arrowstyle='->', 
		  connectionstyle='angle3')
mp.annotate(r'$[\frac{\pi}{2}, 1]$', 
	xycoords='data', xy=(np.pi/2, 1), 
	textcoords='offset points', xytext=(20,-10),
	fontsize=12, arrowprops=ap)

mp.annotate(r'$[\frac{\pi}{2}, 0]$', 
	xycoords='data', xy=(np.pi/2, 0), 
	textcoords='offset points', xytext=(-50,-50),
	fontsize=12, arrowprops=ap)

在这里插入图片描述

附完整代码

"""
绘制正余弦曲线
"""
import numpy as np
import matplotlib.pyplot as mp

# [-π,π] 拆1000个点
x = np.linspace(-np.pi, np.pi, 1000)
sin_x = np.sin(x)
# 绘制余弦曲线 y=1/2 * cos(x)
cos_x = np.cos(x) / 2

# 绘图
mp.plot(x, sin_x, linestyle='--', linewidth=2, 
		color='dodgerblue', alpha=0.9,
		label=r'$y=sin(x)$')
mp.plot(x, cos_x, linestyle=':', linewidth=3,
	    color='orangered', alpha=0.9,
	    label=r'$y=\frac{1}{2}cos(x)$')
	    
# 修改可视范围
mp.xlim(0, np.pi)
mp.ylim(0, 1)

# 修改坐标刻度
x_val_list=[-np.pi, -np.pi/2, 0, np.pi/2, np.pi]
x_text_list=['-π', r'$-\frac{\pi}{2}$', '0', 
			 r'$\frac{π}{2}$', 'π']
mp.xticks(x_val_list, x_text_list)
mp.yticks([-1, -0.5, 0.5, 1], 
	      ['-1', '-0.5', '0.5', '1'])

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

# 绘制两个特殊点
mp.scatter([np.pi/2, np.pi/2], [0, 1], 
	marker='X', s=80, edgecolor='dodgerblue',
	facecolor='deepskyblue', zorder=3)
	
# 为点添加备注
ap = dict(arrowstyle='->', 
		  connectionstyle='angle3')
mp.annotate(r'$[\frac{\pi}{2}, 1]$', 
	xycoords='data', xy=(np.pi/2, 1), 
	textcoords='offset points', xytext=(20,-10),
	fontsize=12, arrowprops=ap)
mp.annotate(r'$[\frac{\pi}{2}, 0]$', 
	xycoords='data', xy=(np.pi/2, 0), 
	textcoords='offset points', xytext=(-50,-50),
	fontsize=12, arrowprops=ap)
	
# 显示图例
mp.legend(loc='best')
mp.show()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值