当前位置: 首页 > 面试题库 >

在Matplotlib中设置绘图画布的大小

汪鸿志
2023-03-14
问题内容

我希望Matplotlib /Pyplot生成具有一致画布大小的图。也就是说,图形可以具有不同的大小以适应轴的描述,但是绘图区域(绘制曲线的矩形)应始终具有相同的大小。

有没有简单的方法可以做到这一点?pyplot.figure()的figsize选项似乎设置了图形的整体大小,而不是画布的整体大小,因此,每当轴描述占据或多或少的空间时,我都会得到不同的画布大小。


问题答案:

这是我对Matplotlib的最大挫败之一。我经常使用栅格数据,例如要在其中添加颜色图,图例和一些标题。matplotlib库中的任何简单示例都将导致不同的分辨率,因此需要重新采样数据。尤其是在进行图像分析时,您不需要任何(不需要的)重新采样。

这是我通常会做的事情,尽管我很想知道是否有更简单或更好的方法。

让我们从加载图片并以相同分辨率输出图片开始:

import matplotlib.pyplot as plt
import urllib2

# load the image
img = plt.imread(urllib2.urlopen('http://upload.wikimedia.org/wikipedia/en/thumb/5/56/Matplotlib_logo.svg/500px-Matplotlib_logo.svg.png'))

# get the dimensions
ypixels, xpixels, bands = img.shape

# get the size in inches
dpi = 72.
xinch = xpixels / dpi
yinch = ypixels / dpi

# plot and save in the same size as the original
fig = 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输出可能会很好。



 类似资料:
  • 我有一个发布的应用程序在Android N上启动时崩溃,因为新引入的

  • 我创建了一个/图表,但图的大小不相同。顶部的屏幕比下面的小,如屏幕截图所示: 有没有办法设定地块的大小?我希望所有的地块大小相等,不管是2块还是200块。

  • 问题内容: 我正在使用matplotlib中的底图绘制地图。数据散布在世界各地,但我只想保留大陆上的所有数据,然后将其丢到海洋上。有没有办法可以过滤数据,还是有办法再次抽空覆盖数据? 问题答案: matplotlib.basemap中有一个方法: 它返回如果给定的x,y点(在投影坐标)是在陆地上,否则。土地的定义基于与类实例关联的GSHHS海岸线多边形。陆地区域内湖泊上的点数不算作陆地点。 有关更

  • 我正在运行Ubuntu 16.04。在Android Studio上,当我试图在模拟器中运行我的应用程序时,我得到以下错误: 致命的例外:主要过程:项目名称在这里,PID: 2528java.lang.运行时间例外:画布:试图绘制太大(216090000bytes)位图。在android.view.DisplayListCanvas.throw如果不能绘制(DisplayListCanvas.ja

  • 当我在logcat中查找时,我看到以下消息: 在我的第一个活动中,我将这个问题追溯到一个ImageView,它显示了一个漂亮的大背景图像。问题中的图像是2048x1066,并且在我的通用目录中,因此无论密度如何,都将使用此图像。 当设置为时,一切正常。但是当我进入时,它就会停止工作。如果我然后用一个较小的映像交换出来,它会在下工作,但是如果我上升到下,它会再次停止工作。 我的猜测是,调整会使您的设

  • 5.2.3 在画布上绘图 本节介绍如何在画布上绘制图形。为了完整起见,我们将前面介绍过的首先需要执行的 几条语句合在一起复制如下: >>> from Tkinter import * >>> root = Tk() >>> c = Canvas(root,width=300,height=200,bg='white') >>> c.pack() 如前所述,c 是一个画布对象,而画布对象提供了若干