2014-12-03 3 views
1

Я хочу построить прямоугольники в разных подзаголовках (найти код ниже), но это не сработает. С массивами чисел код работает (и я получаю три подзаголовка), однако, с Rectangles отличается, и я получаю две пустые подзаголовки и одну с прямоугольником. Любые идеи о том, что не так? Благодаря!Построение прямоугольников в разных подзаголовках в 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

Ошибка, которую вы делаете, заключается в добавлении (i,0) в раздел matplotlib.Patches.Rectangle. Когда вы это сделаете:

Для первого цикла 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

+0

@hitzg да, это правда. ВП потребовалось три подзаголовка с прямоугольниками в нем в первую очередь! Таким образом, ошибка, которую делает OP, была исправлена – ThePredator

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.