这是我们要做的最终效果

接下来将分为3步

画出坐标与函数


import matplotlib.pyplot as plt
import numpy as np
#设置[-3,3]区间的横轴,分成50份
x=np.linspace(-3,3,50)
y=2*x+1
#画出坐标轴
plt.plot(x,y)
plt.show()

这是核心框架,之后的操作都是围绕着修改plt进行的,效果如下

修改坐标原点

在plt.show()上面加上

#将y轴分成[-5,5]的11份
new_ticks=np.linspace(-5,5,11)
plt.yticks(new_ticks)

# gca表示get current axes获得当前实例对象,个人觉得有点像java中的this
ax=plt.gca()
#隐藏右边和上边的边框
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

#ax获得x轴,并将x轴与y中的0对齐
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
#ax获得y轴,并将y轴与x中的0对齐
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

#隐藏掉y轴的0坐标,不然和x轴重了,不好看,0位于从下到上第6个
yticks = ax.yaxis.get_major_ticks()
yticks[5].label1.set_visible(False)

效果

添加annotation注解

在刚刚的代码下方加上

#在坐标系中标记处一个点
x0=1
y0=2*x0+1
plt.scatter(x0,y0)
#从点往下做垂线,从[x0,y0]到[x0,0],颜色是black 格式是--,宽度为2.5

plt.plot([x0,x0],[y0,0],'k--',lw=2.5)
plt.annotate(
    r'$2x+1=%s$'%y0,xy=(x0,y0),#写上的字符串,字符串位置
    xytext=(+30, -30),textcoords='offset points',#字符串相对偏移,指向的点
    arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2')
    # 指向的样式,弧度
             )

就完成了我们的最终效果

上面的r’$2x+1=%s$'是使用用了正则表达式,通过正则表达式有很完整的体系,我们可以设置很多好看的字体的实用的功能

当然了,matplotlib的能量远不止于此,继续加油学习鸭!

完整代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/2/15  23:34
# @Author  : cs
# @decription: 简单的坐标系与函数表达

import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-3,3,50)
y=2*x+1
plt.plot(x,y)


new_ticks=np.linspace(-5,5,11)
plt.yticks(new_ticks)

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

#隐藏掉y轴的0坐标,不然和x轴重了,不好看,0位于从下到上第6个
yticks = ax.yaxis.get_major_ticks()
yticks[5].label1.set_visible(False)

#在坐标系中标记处一个点
x0=1
y0=2*x0+1
plt.scatter(x0,y0)
#从点往下做垂线,从[x0,y0]到[x0,0],颜色是black 格式是--,宽度为2.5
plt.plot([x0,x0],[y0,0],'k--',lw=2.5)
plt.annotate(
    r'$2x+1=%s$'%y0,xy=(x0,y0),#写上的字符串,字符串位置
    xytext=(+30, -30),textcoords='offset points',#字符串相对偏移,指向的点
    arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2')
    # 指向的样式,弧度
             )
plt.show()