python用matplotlib绘制二维坐标轴,设置箭头指向,文本内容方式
使用matplotlib绘制二维坐标轴,设置箭头指向,文本内容
我们在使用matplotlib绘制图像时,默认的坐标轴是在左下角,这样对于一些曲线的显示就不太清楚。
如下:
import matplotlib.pyplot as plt import numpy as np x = np.linspace(-10, 10, 100) y1 = 2 * x y2 = x * x plt.figure() plt.xlabel('X axis') plt.ylabel('Y axis') plt.plot(x, y1, linestyle='--') plt.plot(x, y2) plt.show()
根据X和Y绘制两条曲线,直接绘制的话,坐标轴就在左下角。
对于曲线的展示不清楚,比如我们想把(0,0)点作为坐标轴原点。
可以参考下面的方法。
1.更改坐标轴的位置
可以看到,默认绘图是四个边把图像框起来了。spine() 这个单词的意思是脊梁,就是包围图表的线条。
如下:
分为 top,bottom,left,right 上下左右四条边。我们的方法就是隐藏右边和上边,然后移动左边和下边,移动到想要的位置。
1.首先要获取整张图像的坐标,方法是
ax = plt.gca() # 获取整张图像的坐标的对象
2.隐藏起来两条边,右边和上边
# 将右边,上边的两条边颜色设置为空 其实就相当于抹掉这两条边 ax.spines[‘right'].set_color(‘none') ax.spines[‘top'].set_color(‘none')
3.移动左边和下边,指定为为x轴和y轴
ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left')
4.设置坐标轴交点
# 设置(0,0)为两坐标轴的交点 ax.spines[‘bottom'].set_position((‘data', 0)) ax.spines[‘left'].set_position((‘data', 0))
移动坐标轴后,绘制图像结果如下:
完整代码:
import matplotlib.pyplot as plt import numpy as np x = np.linspace(-10, 10, 100) y1 = 2 * x y2 = x * x plt.figure() plt.xlabel('X axis') plt.ylabel('Y axis') # 设置坐标轴的文字标签 ax = plt.gca() # get current axis 获得坐标轴对象 ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') # 将右边 上边的两条边颜色设置为空 其实就相当于抹掉这两条边 ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') # 指定下边的边作为 x 轴 指定左边的边为 y 轴 ax.spines['bottom'].set_position(('data', 0)) # 指定 data 设置的bottom(也就是指定的x轴)绑定到y轴的0这个点上 ax.spines['left'].set_position(('data', 0)) plt.plot(x, y1, linestyle='--') plt.plot(x, y2) plt.show()
2. 设置箭头内容指向曲线
在绘制曲线时,我们想要用在图像箭头标注一下表达式,调用的函数如下:
annotate(s='str', xy=(x,y), xycoords='data', xytext=(l1,l2), textcoords, arrowprops) # s为标注内容 # xy为基准点 # xycoords='data' xy的坐标是基于data的 # xytext 为注释文字的坐标位置 # textcoords='offset point'代表以这个点为基准 # arrowprops描述箭头,线的弧度等信息,箭头参数,参数类型为字典dict
# 添加标注 x0 = 1 y0 = 2 * x0 + 1 plt.scatter(x0, y0, s=50, color='b') plt.plot([x0, x0], [y0, y0], 'k--', lw=2.5) plt.annotate(r'$2x+1=%s$' % y0, xy=(x0, y0), xycoords='data', xytext=(+30, -30), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2'))
绘制结果如下:
完整代码:
import matplotlib.pyplot as plt import numpy as np x = np.linspace(-3, 3, 50) y = 2*x+1 plt.figure(num=1, figsize=(8, 5)) plt.plot(x, y) ax = plt.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') ax.spines['bottom'].set_position(('data', 0)) ax.spines['left'].set_position(('data', 0)) # 添加标注 x0 = 1 y0 = 2 * x0 + 1 plt.scatter(x0, y0, s=50, color='b') plt.plot([x0, x0], [y0, y0], 'k--', lw=2.5) plt.annotate(r'$2x+1=%s$' % y0, xy=(x0, y0), xycoords='data', xytext=(+30, -30), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2')) plt.show()
3. 设置文本内容
有时候想在图像上设置一行文字的内容,这时候调用的函数如下:
plt.text(x, y, s) # x,y为文字位置 # s为文字内容
plt.text(-3.7, 3, r'$This\ is\ the\ some\ text.\ \mu\ \sigma_i\ \alpha_t$', fontdict={'size': 16, 'color': 'r'})
绘制结果如下:
总结
以上即为python使用matplotlib绘制二维坐标轴,设置箭头指向,文本内容的知识。
仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
这篇文章主要介绍了Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2019-06-06
最新评论