python画箭头_Python-matplotlib绘制带箭头x-y坐标轴图形

在Python的数据可视化库中,采用matplotlib绘制相关图形时,若不加任何设定,一般的x-y坐标轴是不带箭头且是一个封闭的矩形。我们以Sigmoid函数的绘制,给大家展示一下。

import matplotlib.pyplot as plt #导入matplotlib库

import numpy as np #导入numpy库

#生成x步长为0.1的列表数据

x = np.arange(-15,15,0.1)

#生成sigmiod形式的y数据

y=1/(1+np.exp(-x))

#设置x、y坐标轴的范围

plt.xlim(-12,12)

plt.ylim(-1, 1)

#绘制图形

plt.plot(x,y, c='b')

得到的图形为:

从可视化的角度来看,这种图形更多的是给出曲线的形状,特别是其原点并不是(0,0),这导致我们可能很难直观地看到,该曲线的对称性以及在整个坐标内的取值范围。

那么如何采用传统的以(0,0)为原点且带箭头的x-y轴,绘制图形呢?

我们可以引入Matplotlib AxesGrid Toolkit来实现,它是matplotlib的辅助工具,包含一系列对坐标轴设置的框架。其中的axisartist包就用来设置坐标轴的类型。

1.创建画布并引入axisartist工具。

import mpl_toolkits.axisartist as axisartist

#创建画布

fig = plt.figure(figsize=(8, 8))

#使用axisartist.Subplot方法创建一个绘图区对象ax

ax = axisartist.Subplot(fig, 111)

#将绘图区对象添加到画布中

fig.add_axes(ax)

2.绘制带箭头的x-y坐标轴

#通过set_visible方法设置绘图区所有坐标轴隐藏

ax.axis[:].set_visible(False)

#ax.new_floating_axis代表添加新的坐标轴

ax.axis["x"] = ax.new_floating_axis(0,0)

#给x坐标轴加上箭头

ax.axis["x"].set_axisline_style("->", size = 1.0)

#添加y坐标轴,且加上箭头

ax.axis["y"] = ax.new_floating_axis(1,0)

ax.axis["y"].set_axisline_style("-|>", size = 1.0)

#设置x、y轴上刻度显示方向

ax.axis["x"].set_axis_direction("top")

ax.axis["y"].set_axis_direction("right")

我们先把原始的如上图的所有坐标轴隐藏,即长方形的四个边。

然后用ax.new_floating_axis在绘图区添加坐标轴x、y,这里的ax.new_floating_axis(0,0),第一个0代表平行直线,第二个0代表该直线经过0点。同样,ax.axis["y"] = ax.new_floating_axis(1,0),则代表竖直曲线且经过0点。

再次,x.axis["x"].set_axisline_style("->", size = 1.0)表示给x轴加上箭头,"->"表示是空箭头,size = 1.0表示箭头大小。ax.axis["y"].set_axisline_style("-|>", size = 1.0)中"-|>"则是实心箭头。

最后,设置x、y轴上刻度显示方向,对于x轴是刻度标签在上面还是下面,y轴则是刻度标签在左边还是右边。

3.在带箭头的x-y坐标轴背景下,绘制函数图像

#生成x步长为0.1的列表数据

x = np.arange(-15,15,0.1)

#生成sigmiod形式的y数据

y=1/(1+np.exp(-x))

#设置x、y坐标轴的范围

plt.xlim(-12,12)

plt.ylim(-1, 1)

#绘制图形

plt.plot(x,y, c='b')

将Sigmiod曲线添加到画布中,得到结果:

如此,图形就美观很多。

总结一下,绘制带箭头x-y轴图形的原理:引入axisartist坐标轴工具——将原始坐标轴均隐藏掉——添加新的基于原点的x与y轴——为新坐标轴加入箭头,并设置刻度显示方式——加入图形。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值