Screen Shot 2021-11-28 at 7.37.01 PM.png

    1. matplotlib

    第一个小例子

    1. import matplotlib.pyplot as plt
    2. import numpy as np
    3. x = np.linspace(-1,1,50)
    4. #y = 2*x +1
    5. y = x**2
    6. plt.plot(x,y)
    7. plt.show()

    Screen Shot 2021-11-28 at 7.50.53 PM.png
    生成的图片地下,有一溜小图标,每个都可以试试

    第二个小例子

    1. import matplotlib.pyplot as plt
    2. import numpy as np
    3. x = np.linspace(-3,3,50)
    4. y1 = 2*x +1
    5. y2 = x**2
    6. plt.figure() ## 每一张figure的开头
    7. plt.plot(x,y1)
    8. plt.show()
    9. ## 先定figure的开头,下面参数都与这张figure相关,直到下一张figure
    10. plt.figure(num=3,figsize=(8,5)) ## 可以指定编号,图片大小
    11. plt.plot(x,y2) ## 画第一条线
    12. plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
    13. plt.show()

    会出两张图片,第二张如下,画两条线,每条线对应一个plt函数Screen Shot 2021-11-28 at 8.04.40 PM.png
    修改坐标标尺、标签、取值范围等

    1. plt.xlim((-1,2)) ## x轴取值范围
    2. plt.ylim((-2,3)) ## y轴取值范围
    3. plt.xlabel('I am x') ## x轴标签
    4. plt.ylabel('I am y') ## y轴标签
    5. new_ticks = np.linspace(-1,2,5)
    6. plt.xticks(new_ticks) ## x轴刻度
    7. plt.yticks([-2,-1,0,1,3],
    8. [r'$really\ bad$',r'$bad\ \alpha$',r'$normal$',r'$good$',r'$really\ good$'])
    9. ## 注:'\'为转译字符,可以转译空格和希腊字母 ,修改字体可以用正则匹配

    设置边框,挪动坐标轴

    1. # gca = 'get current axis'
    2. ax = plt.gca() ## 拿到的是四个边框
    3. ax.spines['right'].set_color('none') ## 上、右边框去掉
    4. ax.spines['top'].set_color('none')
    5. ax.xaxis.set_ticks_position('bottom') ## 左、下边框设为y、x轴
    6. ax.yaxis.set_ticks_position('left')
    7. ax.spines['bottom'].set_position(('data',0)) ## 挪动x轴,按照y的值挪动
    8. ax.spines['left'].set_position(('data',0)) ## 挪动y轴,按照x的值挪动

    图就变成这样啦 (我觉得比R里面的ggplot2好用)
    Screen Shot 2021-11-28 at 8.46.31 PM.png
    加个图例

    1. l1,=plt.plot(x,y2,label='up') ## 画第一条线
    2. l2,=plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--',label='down') ## 要加上逗号,否则报错
    3. plt.legend(handles=[l1,l2],labels=["aaa","bbb"],loc='best')
    4. ## handles 用来放入legent里的线,label分别给他们命名,需要给plt.plot()返回的对象命名
    5. # loc=best,自己给图例找地方
    6. ## 不想麻烦就不用命名,legend用默认值

    Screen Shot 2021-11-28 at 9.01.29 PM.png
    图例自己找了个地方,在左上角呆着了
    在图上加个注解

    1. ## 设置要标注的点的坐标
    2. x0 =1
    3. y0 = 2*x0 +1
    4. plt.scatter(x0,y0,s=50,color='b')
    5. plt.plot([x0,x0],[y0,0],'k--',lw=2.5) ## k-- is simple for dark --,lw for linewidth
    6. ## 箭头标注点
    7. plt.annotate(r'$2x+1=%s$'% y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30), ## xy的位置基于(x0,y0)点分别+30,-30
    8. textcoords='offset points',fontsize=16,arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2')) ## 箭头的形状, 箭头的弧度
    9. ## 加个文字注释
    10. plt.text(-3.7,3,r'$This\ is\ the\ text.\ \mu\ \sigma_i\ \alpha_t$',
    11. fontdict={'size':16,'color':'r'})

    Screen Shot 2021-11-28 at 9.30.36 PM.png
    漂亮的注释~~
    更多注释相关参数可见:https://blog.csdn.net/leaf_zizi/article/details/82886755

    1. x = np.linspace(-3,3,50)
    2. y1 = 2*x +1
    3. plt.figure(num=1,figsize=(8,5)) ## 可以指定编号,图片大小
    4. plt.plot(x, y1,linewidth=10,zorder=1)
    5. # gca = 'get current axis'
    6. ax = plt.gca() ## 拿到的是四个边框
    7. ax.spines['right'].set_color('none') ## 上、右边框去掉
    8. ax.spines['top'].set_color('none')
    9. ax.xaxis.set_ticks_position('bottom') ## 左、下边框设为y、x轴
    10. ax.yaxis.set_ticks_position('left')
    11. ax.spines['bottom'].set_position(('data',0)) ## 挪动x轴,按照y的值挪动
    12. ax.spines['left'].set_position(('data',0)) ## 挪动y轴,按照x的值挪动
    13. for label in ax.get_xticklabels() + ax.get_yticklabels():
    14. label.set_fontsize(12)
    15. label.set_bbox(dict(facecolor='white',edgecolor='None',alpha=0.7,zorder=2))
    16. plt.show()

    Screen Shot 2021-11-28 at 9.50.14 PM.png
    希望线无论多款,刻度都不被遮挡

    1. for label in ax.get_xticklabels() + ax.get_yticklabels():
    2. label.set_fontsize(12)
    3. label.set_bbox(dict(facecolor='white',edgecolor='None',alpha=0.7,zorder=2))
    4. ## zorder有点像ps中的涂层,需要为线和矿分别设置zorder,并且order大的才能显示出来

    Screen Shot 2021-11-28 at 9.51.22 PM.png
    给刻度加一个小白框,颜色和背景色一样
    线就先捣鼓到这啦~