• matplotlib y轴标注显示不全以及subplot调整的问题


    matplotlib y轴标注显示不全以及subplot调整的问题

    问题:
    我想在y轴显示的标注太长,想把它变成两行显示,发现生成的图形只显示的第二行的字,把第一行的字挤出去

    想要的是显示两行这样子的

    现实却是这样子

    主要相关的api有:

    • plt.subplots_adjust
    • set_ylabel
    • plt.text

    解决思路

    来自matplotlib的官网,以及图示

    1. 当出现右边显示不全的时候,第一感觉是:应该可以通过set_ylabel 来设置y轴标注的位置和大小,发现set_ylabel只能设置labelpad ,没有位置的参数;
    2. 然后找到了可以用text设置标注字体的位置和方向,但是要多次定位,尝试,发现不方便;
    3. 那么想到的是应该可以设置plot的位置吧,用ax1.plot?找了下,也没看到,不爽;
    4. 在show的图形界面发现一个移动的按钮
    5. 移动left亦可以显示出y轴的标注了,那么我应该只需要在程序中设置一下left的参数既可以了吧,在上面matplotlib的example中,找到了我想要的subplots_adjust
    6. 即有了下面的源代码,满足设置要求。

    源代码如下:

    import matplotlib.pyplot as plt
    import numpy as np
    from numpy import abs
    
    size=[5,10,20,30,50,100]
    avg=[-0.2896,0.073865632,0.034858287,-0.092241705,-0.022924236,0.016541661]
    avr=[0.032,0.077757872,0.090351641,0.036522663,0.034413038,0.096587464]
    
    fig = plt.figure()
    
    ax1 = fig.add_subplot(211)
    lns1 = ax1.plot(size, trackPos_avg,color='blue',label='error average',linestyle='-',linewidth=1.9)
    ax1.set_ylabel('deviation from
    central line ($m$)',fontsize=18, labelpad = 0.5)
    
    plt.xticks(fontsize = 17)#对坐标的值数值,大小限制
    plt.yticks(fontsize = 17)
    
    ax2 = fig.add_subplot(212)
    ax2.set_ylabel('standard 
    variance ($m^2$)',fontsize=18,labelpad = 12.5)
    lns2 = ax2.plot(size, avr, color='red',label='mean square error',linestyle='-',linewidth=1.9)
    
    plt.xticks(fontsize = 17)#对坐标的值数值,大小限制
    plt.yticks(fontsize = 17)
    ax2.set_xlabel('replay size',fontsize=18)
    
    plt.subplots_adjust(left=0.18, wspace=0.25, hspace=0.25,
                        bottom=0.13, top=0.91)
    
    #plt.text(0.4, 0.4, 'deviation from
     central line ($m$)', rotation=90, ha='left')
    
    #plt.legend(prop={'size':18})  # loc='upper left',
    
    #fig.savefig('./figure/error_paper.eps', format='eps', dpi=1000)
    fig.savefig('./figure/error_paper.png', dpi=1000)
    
    plt.show()
    

    可以下面的yticks,限制横纵坐标的值

    plt.xticks(fontsize = 17)#对坐标的值数值,大小限制
    plt.yticks([0.01,0.03,0.05,0.07,0.09],fontsize = 17)
  • 相关阅读:
    边缘节点为什么不能直接通过 kubernetes service 直接访问云端 master 节点中的 API Server
    Leaflet中原生方式实现测距
    http网页是否能引用https资源/调用https接口?https网页是否能引用http资源/调用http接口?
    Vite2 Vue3 SSR
    SQL模糊查询的四种匹配模式
    vue3中ref、reactive、toRef、toRefs区别
    iis在访问vue服务时报错
    vue3中使用elform
    koa2cors实现过程以及应用
    chrome v8的垃圾回收机制和内存泄漏分析
  • 原文地址:https://www.cnblogs.com/Qwells/p/6215280.html
Copyright © 2020-2023  润新知