这是我对Matplotlib的最大挫败之一。我经常使用栅格数据,例如要在其中添加颜色图,图例和一些标题。matplotlib库中的任何简单示例都将导致不同的分辨率,因此需要重新采样数据。尤其是在进行图像分析时,您不需要任何(不需要的)重新采样。
这是我通常会做的事情,尽管我很想知道是否有更简单或更好的方法。
让我们从加载图片并以相同分辨率输出图片开始:
import matplotlib.pyplot as pltimport urllib2# load the imageimg = plt.imread(urllib2.urlopen('http://upload.wikimedia.org/wikipedia/en/thumb/5/56/Matplotlib_logo.svg/500px-Matplotlib_logo.svg.png'))# get the dimensionsypixels, xpixels, bands = img.shape# get the size in inchesdpi = 72.xinch = xpixels / dpiyinch = ypixels / dpi# plot and save in the same size as the originalfig = plt.figure(figsize=(xinch,yinch))ax = plt.axes([0., 0., 1., 1.], frameon=False, xticks=[],yticks=[])ax.imshow(img, interpolation='none')plt.savefig('D:\mpl_logo.png', dpi=dpi, transparent=True)
请注意,我手动定义了轴的位置,以便跨越整个图形。
与上述类似,您可以在图像周围添加一些边距,以允许使用标签或颜色条等。
本示例在图像上方添加20%的边距,然后将其用于绘制标题:
fig = plt.figure(figsize=(xinch,yinch/.8))ax = plt.axes([0., 0., 1., .8], frameon=False, xticks=[],yticks=[])ax.imshow(img, interpolation='none')ax.set_title('Matplotlib is fun!', size=16, weight='bold')plt.savefig('D:\mpl_logo_with_title.png', dpi=dpi)
因此,图形的y尺寸(高度)增加,轴的y尺寸均等地减小。这样可以提供更大(整体)的输出图像,但是轴区域仍将是相同大小。
具有诸如.set_scale()之类的图形或轴属性来强制执行真正的1-on-x输出可能会很好。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)