在matplotlib中保存一个没有边框,轴,空格的条形图

时间:2018-03-20 14:21:42

标签: python matplotlib

使用matplotlib.pyplot,我想创建一个条形图,并将其保存到没有轴,边框和其他空格的图像中。 Save spectrogram (only content, without axes or anything else) to a file using Matloptlib的答案以及所有相关问题和相应答案似乎都不适用于条形图。

到目前为止,我得到了:

import matplotlib.pyplot as plt

fig,ax = plt.subplots(1)
fig.subplots_adjust(left=0,right=1,bottom=0,top=1)
fig.patch.set_facecolor('xkcd:mint green')
ax.set_facecolor('xkcd:salmon')
ax.axis('off')
ax.bar(1,1,1,-1,alpha=1, align='center', edgecolor='black')
ax.bar(2,1,1,-2,alpha=1, align='center', edgecolor='black')
ax.axis('off')
fig.savefig('test.png', dpi=300, frameon='false', pad_inches=0.0,bbox_inches='tight')

有三个问题:

  1. 左侧,右侧和右侧有一些剩余的空白。
  2. 图中似乎是在底部切割,因为下部条的底线比其他条更薄。
  3. 纵横比应为1:1,似乎已关闭。
  4. barplot output

1 个答案:

答案 0 :(得分:1)

  1. 链接问题的答案不使用bbox_inches='tight'。这与没有空格的愿望是矛盾的。 此外,轴内部还有一些 轴边距,因为这些条纹当然不直接位于轴边界处。您可以设置ax.margins(0)
  2. 一条线延伸到坐标的两个方向,例如如果在位置0处有一个宽度为3像素的行,则会得到一个高于0的像素,一个像素为0,一个低于0.如果限制图像从位置0开始,则会剪切低于0的那个。
  3. 没有理由这个方面应该是1:1。但如果你想要它是1:1你需要明确地设置它。 ax.set_aspect(1)。当然,只有当图形也设置为具有相等的宽度和高度时,这才有意义。
  4. 总计。

    import matplotlib.pyplot as plt
    
    fig,ax = plt.subplots(figsize=(5,5))
    fig.subplots_adjust(left=0,right=1,bottom=0,top=1)
    fig.patch.set_facecolor('xkcd:mint green')
    ax.set_facecolor('xkcd:salmon')
    ax.axis('off')
    ax.margins(0)
    ax.set_aspect(1)
    ax.bar(1,1,1,-1,alpha=1, align='center', edgecolor='black')
    ax.bar(2,1,1,-2,alpha=1, align='center', edgecolor='black')
    
    fig.savefig('test.png', dpi=300, frameon=False, pad_inches=0.0)
    

    enter image description here