确定matplotlib轴大小(以像素为单位)

发布于 2021-01-29 18:15:24

给定matplotlib中的一组,是否有办法确定其像素大小?我需要根据调整大小来调整大小,以适应更大或更小的数字。

(特别是我想更改线宽,使其与轴的大小成比例。)

关注者
0
被浏览
253
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这给出了以英寸为单位的宽度和高度。

    bbox = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
    width, height = bbox.width, bbox.height
    

    这可能足以满足您的目的,但是要获得像素,可以乘以fig.dpi

    width *= fig.dpi
    height *= fig.dpi
    

    例如,

    import matplotlib.pyplot as plt
    
    def get_ax_size(ax):
        bbox = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
        width, height = bbox.width, bbox.height
        width *= fig.dpi
        height *= fig.dpi
        return width, height
    
    fig, ax = plt.subplots()
    print(get_ax_size(ax))
    #(496.0, 384.00000000000006)
    
    ax2 = plt.axes([0.3, 0.3, 0.7, 0.7])
    print(get_ax_size(ax2))
    # (448.0, 336.0)
    

    要制作与该图形大小完全相同的图像,必须删除图形与轴之间的空格:

    import numpy as np
    import matplotlib.pyplot as plt
    
    def get_ax_size(ax):
        bbox = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
        width, height = bbox.width, bbox.height
        width *= fig.dpi
        height *= fig.dpi
        return width, height
    
    data = np.arange(9).reshape((3, 3))
    fig = plt.figure(figsize=(8,6), dpi=80)
    ax = plt.Axes(fig, [0., 0., 1., 1.])
    ax.set_axis_off()
    fig.add_axes(ax)
    ax.imshow(data, aspect='equal')
    print(get_ax_size(ax))
    # (640.0, 480.0)
    plt.savefig('/tmp/test.png', dpi=80)
    

    % identify /tmp/test.png
    /tmp/test.png PNG 640x480 640x480+0+0 8-bit DirectClass 50.5KB 0.020u 0:00.020
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看