2017-02-27 116 views
0

我希望使用pyplot生成一系列二维直​​方图。 我希望能够指定生成图像的大小和比例(或宽高比)。除此之外,我想删除刻度和轴标签和边界。如何在pyplot中指定二维直方图图像大小和比例

这似乎不可能在plt.hist2d()方法的参数中。

我没有分享我的(相当复杂的)代码,而是发布了pyplot演示脚本。如果我想要的是这个代码可能的话,那么我的代码就可以实现。

import matplotlib.pyplot as plt 
import numpy as np 
x = np.random.randn(1000) 
y = np.random.randn(1000) + 5 

# normal distribution center at x=0 and y=5 
plt.hist2d(x, y, bins=40) 
plt.show() 

感谢您的帮助提前。

+0

你的问题听起来像你想创建一个只包含*没有任何matplotlib直方图轴注释和填充图像('.png'任何文件或)。那是对的吗? – kazemakase

+0

@kazemakase,这是正确的。但是,特别是需要设置宽高比。 –

回答

0

单独指定方面不会帮助,你需要在除了宽度或高度的数字大小。
要摆脱边距,您可以使用subplots_adjust。并且为了关闭轴,您需要axis("off")

import matplotlib.pyplot as plt 
import numpy as np 
x = np.random.randn(1000) 
y = np.random.randn(1000) + 5 

width=4 # inch 
aspect=0.8 # height/width ratio 
height = width*aspect 
plt.figure(figsize=(width, height)) 
plt.hist2d(x, y, bins=40) 
plt.subplots_adjust(bottom=0, top=1, left=0, right=1) 
plt.gca().axis("off") 
plt.show() 

enter image description here

+0

@ImportanceOfBeing非常感谢你,非常有帮助。不知道为什么我有这样的麻烦让这个工作。 –

0

的figsize应该做你想要什么:

plt.figure(figsize=(20,10))  
plt.hist2d(x, y, bins=40) 
plt.show() 
+0

这似乎不适用于二维直方图。你能解释一下在上面的例子中它是如何工作的吗? –

+0

@ IanDella-Rocca编辑我的答案,将其与您的评论相结合。 Juste将'(20,10)'元组更改为您想要的数字的比例。 – Eiffel

0

下面的代码片断示出了如何快速且容易地

  • 设置图中尺寸(和隐式的纵横比)
  • 禁用轴边界框和刻度注解
  • 设置轴来填充整个图形(移除边框)
  • 将结果图保存到图像文件。

import matplotlib.pyplot as plt 
import numpy as np 
x = np.random.randn(1000) 
y = np.random.randn(1000) + 5 

plt.figure(figsize=[7, 2]) # set figure dimensions to weird but illustrative aspect ratio 
plt.hist2d(x, y, bins=40) 
plt.box(False) # disable axis box 
plt.xticks([]) # no x axis ticks 
plt.yticks([]) # no y axis ticks 
plt.subplots_adjust(left=0, right=1, top=1, bottom=0) # remove borders 
plt.savefig('output.png') 
plt.show() 
+0

看起来我已经被打了几分钟的答案,但'axis(“off”)'实际上比'box' /'xticks' /'yticks'更加整洁。 – kazemakase