我使用matplotlib创建了一个图,但我已经意识到绘图轴和绘制的线被缩小了。
阅读此earlier discussion thread,它解释了如何设置数字大小。
fig, ax = plt.subplots()
fig.set_size_inches(3, 1.5)
plt.savefig(file.jpeg, edgecolor='black', dpi=400, facecolor='black', transparent=True)
使用上面的代码(为简洁起见,删除了其他配置),我得到的结果图像文件具有1200 X 600
所需的尺寸(我们应该说分辨率吗?)和所需的文件大小。
投影图像以不寻常的方式缩小,例如注释被放大。虽然我可以在轴上设置标签的大小,但由于底部和右侧脊柱很大,因此绘制的线条也是如此,因此数字看起来与比例尺不成比例。
因此,问题是,哪些配置出错?
答案 0 :(得分:47)
图形尺寸((6.4, 4.8)
)确定图形的大小(以英寸为单位)。这给出了轴(和其他元素)在图中的空间量。 matplotlib 2中的默认图形大小为figsize=(w,h)
英寸。较大的图形大小将允许显示更长的文本,更多的轴或更多的标记标记。
每英寸点数(dpi)确定数字包含的像素数。 matplotlib中的默认dpi为100. px, py = w*dpi, h*dpi # pixels
# e.g.
# 6.4 inches * 100 dpi = 640 pixels
的数字为
(1200,600)
因此,为了获得像素大小为例如1的图形。 figsize=(15,7.5), dpi= 80
figsize=(12,6) , dpi=100
figsize=( 8,4) , dpi=150
figsize=( 6,3) , dpi=200
etc.
您可以选择数字大小和dpi的几种组合,例如
import matplotlib.pyplot as plt
%matplotlib inline
def plot(fs,dpi):
fig, ax=plt.subplots(figsize=fs, dpi=dpi)
ax.set_title("Figsize: {}, dpi: {}".format(fs,dpi))
ax.plot([2,4,1,5], label="Label")
ax.legend()
figsize=(2,2)
for i in range(1,4):
plot(figsize, i*72)
dpi=72
for i in [2,4,6]:
plot((i,i), dpi)
现在,有什么区别?这取决于图中元素的大小。线条,标记,文本等大多数元素都有以磅为单位的大小 Matplotlib数据使用每英寸点数(ppi)为72.厚度为1磅的线将为1./72。英寸宽。使用fontsize 12点的文本将是12./72。寸高。
当然,如果您以英寸为单位更改数字大小,则点数不会更改,因此以英寸为单位的较大数字仍然具有相同的元素大小。 因此改变图形尺寸就像拿一张不同尺寸的纸张一样。这样做当然不会改变用同一支笔绘制的线条的宽度。
另一方面,更改dpi会缩放这些元素。在72 dpi时,1点大小的线是一个像素强。在144 dpi时,这条线强2像素。 因此,较大的dpi会像放大镜一样。所有元素都通过镜头的放大倍数进行缩放。
左图中的图像显示了恒定图形尺寸和变化dpi的比较。在右侧,您可以看到恒定的dpi和不同的图形大小。每行中的数字具有相同的像素大小。
重现的代码:
- (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection {
[super traitCollectionDidChange: previousTraitCollection];
NSLog(@"current trait collection: %@",self.traitCollection);
NSLog(@"previous trait collection: %@", previousTraitCollection);
}