[Python][matplotlib.pyplot]移动X,Y坐标轴到原点(0,0),使得刻度数字间隔1,并且X,Y轴的刻度之间的实际距离(像素多少)一样,还加了网格线

问题:

Python用matplotlib.pyplot画线,坐标轴是靠在最左边和最底下的,而且坐标轴的刻度数字不是间隔1,而且X轴和Y轴的刻度间距(像素)也不一样,怎么解决呢?请往下看。

代码:

# -*- coding: utf-8 -*-
"""
Created on Mon Jul 24 11:01:24 2023

@author: howard
"""
import numpy as np
import matplotlib.pyplot as plt


#调整坐标轴:坐标轴移到原点(0,0);坐标轴刻度数字间隔1;刻度之间的像素一样
def adjustAxis():
    # 创建图形和坐标轴对象
    fig, ax = plt.subplots()
    
    # 设置Y轴在0位置
    ax.spines['left'].set_position('zero')
    # 设置X轴在0位置
    ax.spines['bottom'].set_position('zero')
    
    # 隐藏右边和上边的坐标轴线
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    
    # 设置X、Y轴刻度间隔为1
    ax.xaxis.set_major_locator(plt.MultipleLocator(1))
    ax.yaxis.set_major_locator(plt.MultipleLocator(1))
    
    # 调整图形的大小,保持宽高大小一样,才能保证X轴和Y轴刻度之间的像素间隔相等
    fig.set_size_inches(5, 5)  # 根据需要调整图形的大小
    
    #这个步骤是画网格线
    plt.grid(True, linestyle="--", alpha=0.5)


# 利用 matplotlib 来进行画图
def drawXY():
    
    adjustAxis()
    
    # param:起点,终点,间距
    x = np.arange(-3,4,1)
    y = x
    plt.plot(x, y)

    plt.show()
 
 
if __name__ == '__main__':
    drawXY()

实际效果图

 当然,有个小问题:

由于这个图形会自动适应窗体的大小,所以当X,Y的取值范围不同的时候,或者用鼠标改变这个窗口大小之后,是不能维持X,Y轴刻度之间的像素是一样的。

猜你喜欢

转载自blog.csdn.net/H_O_W_E/article/details/131892191
今日推荐