2015-01-30 2 views
0

Это, вероятно, очень наивный вопрос, но я не могу найти четких инструкций, как это сделать. То, что я пытаюсь сделать в Matplotlib является:Добавить слои данных в matplotlib

  1. ли некоторые расчеты
  2. Создать фигуру или объект оси?
  3. Добавить данные в объект, участок его
  4. ли еще некоторые расчеты
  5. Добавить новые данные к объекту как новый слой (не расширять существующие данные, но есть новая линия/рассеивание)

Я хочу сделать что-то вроде:

x = rand(10) 
y = rand(10) 
p = plot(x,y, '.', label="x:y") 

# other code, possibly a new cell in the notebook 

a = rand(10) 
b = rand(10) 

p.plot(a,b, '--', label="a:b") # error. what do I do to add a layer here? 

Конечный участок должен содержать как (х, у) и (а, б) данные.

Я НЕ заинтересован в том, чтобы иметь кучу подзаголовков (каждый из них, похоже, есть), и я хочу сделать это в pylab-графике (в IPython-ноутбуке).

Спасибо!

ответ

1

Ваша проблема заключается в том, что то, что возвращает plot, не является фактическим объектом, где вещи строятся, но это то, что вы пытаетесь использовать в качестве. Таким образом, вам нужно определить р на самом деле быть объект, который вы хотите построить вещи.

import pylab as py 
from numpy.random import rand 

x = rand(10) 
y = rand(10) 
p = py.gca() 
p.plot(x,y, '.', label="x:y") 

# other code, possibly a new cell in the notebook 

a = rand(10) 
b = rand(10) 

p.plot(a,b, '--', label="a:b") 

На самом деле в исходном коде, если вы только что удалили p. в вашей второй команды сюжета, вы получите то, что я думай, что тебе нужно.

+1

Чтобы сделать это лучше, я бы а) ** избегаю pylab **. Промульгировать использование pylab в сценариях не совсем не хорошо (см. [Здесь] (http://carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html)) и b) описать, что объект, о котором вы говорите * на самом деле есть * (т. е. объект 'Axes') – Ajean

+0

Большое спасибо, @Joel! –

+0

Другой вопрос: как мне построить p из приведенного выше примера в другом месте кода? Есть ли 'p.show()' или что-то в этом роде? –

0

Один из способов, который я решил эту проблему, чтобы создать фигуру и оси следующим образом:

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.plot([1,2,3],[1,2,3]) 

параметров Набор фигуры по мере необходимости здесь и, наконец, называют шоу, но с блоком = False

plt.show(block=False) 

Затем из других функций вы можете добавить одну и ту же ось с помощью функции Matplotlibs plt.gca(), которая возвращает текущий или последний щелчок по оси пользователем следующим образом (но не создавайте новую фигуру или ось) и используя матплотбибс-дро ():

plt.gca().plot([4,5,6],[4,5,6]) 
plt.draw() 
Смежные вопросы