matplotlib高级篇——坐标轴设置(坐标轴居中、坐标轴箭头、刻度设置、标识设置)

问题
我们在用matplotlib绘制图的时候总是有各种需求,比如下图为matplotlib默认设置画的正弦图
在这里插入图片描述
但是我们的心中想要达到的目标图为下图,那么就需要对坐标轴进行设置。

在这里插入图片描述
解决方案
这里要介绍matplotlib绘图辅助工具包mpl_toolkits,里面包含了一系列对于坐标轴设置的方法。
首先导入辅助工具包里面的轴系设置包

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import mpl_toolkits.axisartist as axisartist
    #导入辅助工具包里面的坐标轴系设置方法axisartist

新建画板,添加绘图区

    fig = plt.figure('Sine Wave', (10,8))
    #figure(num, figsize, dpi, facecolor, edgecolor, frameon, FigureClass, clear)
    #新建了一个画板(画图视窗)
    ax = axisartist.Subplot(fig, 1,1,1)
    fig.add_axes(ax)
    #新建一个轴系图(绘图区)对象ax,并添加到画板中

隐藏默认坐标轴(上下左右边框),并新建坐标轴X-Y,同时设置刻度标识方向
在这里插入图片描述

    ax.axis[:].set_visible(False)
    #
    ax.axis["x"] = ax.new_floating_axis(0, 0)
    ax.axis["y"] = ax.new_floating_axis(1, 0)
    #new_floating_axis(self, nth_coord, value, axis_direction='bottom')
    #新建可移动的坐标轴
    ax.axis["x"].set_axis_direction('top')
    ax.axis["y"].set_axis_direction('left')

创建坐标轴的方法有两种:

new_fixed_axis(self, loc, offset=None) new_floating_axis(self,
nth_coord, value, axis_direction=‘bottom’)

①:nth_coord: 坐标轴方向,0代表X方向,1代表Y方向
②:value:坐标轴处于位置,如果是平行与X轴的新坐标轴,则代表Y位置(即通过(0,value)),如果是平行与Y轴的新坐标轴,则代表X位置(即通过(value,0))。
③:axis_direction:代表刻度标识字的方向,可选[‘top’, ‘bottom’, ‘left’, ‘right’]
其中new_floating_axis()相对更加灵活,本节中采用new_floating_axis()方法来设置坐标轴位置。

加上坐标轴箭头,设置刻度标识位置

    ax.axis["x"].set_axisline_style("->", size = 2.0)
    ax.axis["y"].set_axisline_style("->", size = 2.0)
    ax.axis["x"].set_axis_direction('top')
    ax.axis["y"].set_axis_direction('left')

画上y=sin(t)折线图,设置刻度范围,设置刻度标识,设置坐标轴位置
在这里插入图片描述

t = np.linspace(0, 2*np.pi)

    y = np.sin(t)
    ax.plot(t, y, color = 'red', linewidth = 2)
    plt.title('y = 2sin(2t)',fontsize = 14, pad = 20)
    #
    ax.set_xticks(np.linspace(0.25,1.25,5)*np.pi)
    ax.set_xticklabels(['$\\frac{\pi}{4}$','$\\frac{\pi}{2}$', '$\\frac{3\pi}{4}$', '$\pi$', '$\\frac{5\pi}{4}$', '$\\frac{3\pi}{2}$'])
    ax.set_yticks([0, 1, 2])
    #设置刻度标识显示
    ax.set_xlim(-0.5*np.pi,1.5*np.pi)
    ax.set_ylim(-2, 2)
    plt.show()
在matplotlib中公式打印可以使用Latex格式。

由于在新建坐标轴中设定了轴的通过点,所以通过设置坐标轴范围,可以间接移动坐标轴在图中的位置(一般放在最后作为最后的设定,如果放在前面,可能后续有方法使得值域超过该范围,系统会自动适应,导致显示不能达到我们的预想)。

运行结果如下,完美O(∩_∩)O。

在这里插入图片描述
代码附录

    import numpy as np
    import matplotlib.pyplot as plt
    import mpl_toolkits.axisartist as axisartist
    
    fig = plt.figure('Sine Wave', (10,8))
    
    ax = axisartist.Subplot(fig, 1,1,1)
    fig.add_axes(ax)
    
    ax.axis[:].set_visible(False)
    
    ax.axis["x"] = ax.new_floating_axis(0, 0)
    ax.axis["y"] = ax.new_floating_axis(1, 0)
    ax.axis["x"].set_axis_direction('top')
    ax.axis["y"].set_axis_direction('left')
    ax.axis["x"].set_axisline_style("->", size = 2.0)
    ax.axis["y"].set_axisline_style("->", size = 2.0)
    
    t = np.linspace(0, 1*np.pi)
                               更多Python学习资料
                                
                                QQ 688244617
                               
                                  免费自取

    y = 2*np.sin(2*t)
    ax.plot(t, y, color = 'red', linewidth = 2)
    plt.title('y = 2sin(2t)',fontsize = 14, pad = 20)
    
    ax.set_xticks(np.linspace(0.25,1.25,5)*np.pi)
    ax.set_xticklabels(['$\\frac{\pi}{4}$','$\\frac{\pi}{2}$', '$\\frac{3\pi}{4}$', '$\pi$', '$\\frac{5\pi}{4}$', '$\\frac{3\pi}{2}$'])
    ax.set_yticks([0, 1, 2])
    
    ax.set_xlim(-0.5*np.pi,1.5*np.pi)
    ax.set_ylim(-2.2, 2.2)
    
    plt.show()
    --------------------- 

原文:https://blog.csdn.net/u012915522/article/details/91506120

  • 3
    点赞
  • 4
    评论
  • 41
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值