2014-12-03 24 views
1

我想绘制不同子图中的矩形(查找下面的代码),但它不起作用。用数组数组的代码工作(我得到的三个子图),但是,与矩形是不同的,我得到两个空的subplots和一个矩形。任何有关错误的想法?谢谢!在Python中的不同子图中绘制矩形

n = 3 
fig = plt.figure() 

for i in xrange(n): 
    ax = fig.add_subplot(n, 1, i+1) 
    ax.add_patch(matplotlib.patches.Rectangle((i,0), 100, 100, color="green")) 

plt.show() 

回答

0

您正在做的错误是在matplotlib.Patches.Rectangle部分添加(i,0)。当您这样做时:

对于第一个循环,i为0,坐标为(0,0)

在第二个循环中,您的i变为1,所以坐标将变为(1,0)!这会使矩形的左下角采用坐标(1,0)

此代码将工作:

import matplotlib.pyplot as plt 
import matplotlib 

n = 3 
fig = plt.figure() 

for i in range(n): 
    ax = fig.add_subplot(n,1,i+1) 
    ax.add_patch(matplotlib.patches.Rectangle((0,0), 100, 100, color="green")) 

plt.show() 

这部作品的原因是矩形的左下角的坐标总是(0,0)。这产生了enter image description here

+0

有趣。我不认为增加的'x'坐标是一个错误。但是你的解决方案仍然只显示矩形的一小部分。 – hitzg 2014-12-03 10:00:41

+0

@hitzg是的,这是真的。 OP首先想要三个带矩形的子图!所以OP的错误被纠正了 – ThePredator 2014-12-03 10:10:37

1

Matplotlib在绘制补丁时不会自动设置轴限制。示例中的补丁已绘制,但第二个和第三个补丁的坐标为(1,0)(2,0),超出标准轴限制(0,1)。 你可以让matplotlib为你做的有:

ax.relim() 
ax.autoscale_view() 

或做手工:

ax.set_ylim((0,110)) 
ax.set_xlim((0,110)) 

在你有你的循环做(即每个轴)病例和后您致电add_patch