matplotlib图像刻度、坐标轴的设置

    xiaoxiao2022-06-25  244

    matplotlib.pyplot画出来的图,有时候看着挺别扭的:

    别扭在哪?matplotlib默认的坐标轴竟然不是以(0,0)为原点。这就需要我们自己调整坐标轴的位置了。

    先抛出结论:

    1,刻度(ticks)的颜色独立于边线(spine)

    2,刻度(ticks)的位置则依附于边线(spine)

    3,可以通过设置边线(spine)来更改坐标轴的位置

    看不懂?go on↓

     

    一,颜色问题

    如图“我是甲”,这是y=2*np.sin(x)+0.5的默认曲线图,没有做任何格式设置,代码如下:

    import numpy as np from matplotlib import pyplot as plt fig = plt.figure("我是甲") ax=fig.add_subplot(111) line,=ax.plot(x, 2*np.sin(x)+0.5) plt.show

    生成图片如下:

    如下图箭头标注,曲线上下左右的四条边线称为spine,左边线就是ax.spines['left']:

    有些和我一样帅的朋友可能会问:边线(spine)和刻度(ticks)是啥关系?尝试更改左边线的颜色:

    import numpy as np from matplotlib import pyplot as plt fig = plt.figure("我是乙") ax=fig.add_subplot(111) ax.spines['left'].set_color('yellow') #左边线设置为黄色 line,=ax.plot(x, 2*np.sin(x)+0.5) plt.show

    得到图像如乙:

    只是左边线变黄了,刻度还是黑色。那么如何更改刻度颜色呢?添加一行代码:

    import numpy as np from matplotlib import pyplot as plt fig = plt.figure("我是丙") ax=fig.add_subplot(111) ax.spines['left'].set_color('yellow') #左边线设置为黄色 ax.xaxis.set_tick_params(color='red',colors='green') #设置X轴刻度颜色 line,=ax.plot(x, 2*np.sin(x)+0.5) plt.show

    得到的图像如丙,可以看到X轴刻度线和刻度值的颜色分别变成了红和绿,而X轴的颜色还是黑色:

    至此,我们可以得到结论1:

    1,刻度(ticks)的颜色独立于边线(spine)

     

    二, 位置问题

    把花里胡哨的颜色设置删掉,设置一下下边线的位置:

    import numpy as np from matplotlib import pyplot as plt fig = plt.figure("我是丁") ax=fig.add_subplot(111) ax.spines['bottom'].set_position(('data',2)) #下边线位置放到数值为2的位置 line,=ax.plot(x, 2*np.sin(x)+0.5) plt.show

    得的图像如丁,可以看到刻度跟着下边线一块儿挪走了:

    解释一下添加的那行代码。‘bottom'表示是下边线,(’data', 2 )表示是下边线放到data为2的位置。那么data是啥? 就是Y轴上刻度为2的地方。

    所以结论2、3也有了:

    2,刻度(ticks)的位置则依附于边线(spine)

    3,可以通过设置边线(spine)来更改坐标轴的位置

    事实上,可以通过

    ax.xaxis.set_ticks_position('top')

    来设置上边线为X轴.类似地,如果你希望右边线作为Y轴,就写一句:

    ax.yaxis.set_ticks_position('right')

     

    三,边线位置的具体设置方法

    官方文档对set_position的说明如下:

     啥意思?

    确定边线的位置有三种操作。

    如果是’data',就是按照刻度值来,这个咱已经知道了

    如果是'outward'呢?就是根据距离边缘位置的距离

    如果是'axes'呢?就是根据坐标轴的百分比,数字取值只能是0.0~1.0

    我知道这么解释你是肯定看不懂的,再帅也看不懂。所以上实例:

    1,'outward'用法:

    设置下边线的'outward'为12:

    ax.spines['bottom'].set_position(('outward',12)) #下边线偏离边缘距离为12  

    ↑可以看到下边线往下跑了些。

    再把下边线的‘outward'设为-17:

    ax.spines['bottom'].set_position(('outward',-17)) #下边线偏离边缘距离为-17

    嗯,下边线就往上跑了17

    2,'axes'用法

    这回我们搞搞右边线。将右边线的’axes'设为0.3:

    import numpy as np from matplotlib import pyplot as plt fig = plt.figure("我是己") ax=fig.add_subplot(111) ax.spines['right'].set_position(('axes',0.3)) #右边线移到30%的位置 line,=ax.plot(x, 2*np.sin(x)+0.5) plt.show

    得到了己图:

    嗯,右边线跑到了整个图像的左边起30%的位置

    3,'center'和'zero'

    为了图省事,其实我们可以直接用'center'把边线挪到正中,相当于('axes', 0.5),这次我们处理的是上边线。如图庚:

     

    也可以用'zero'把边线移到刻度为0的地方,相当于('data', 0),还是处理的上边线,如图辛:

    (不需要写结尾)


    最新回复(0)