2016-04-26 2 views
0

Я создал участок, содержащий несколько подзаголовков на сетке. Графики отличаются двумя параметрами, поэтому я хотел бы, чтобы они выглядели так, как они упорядочивались в системе координат.Нарисуйте стрелки на фигуре matplotlib прямо

Мне удалось построить линии, используя matplotlib.lines.Line2D() рядом с подзаголовками прямо на рисунке. Но я бы предпочел иметь стрелу вместо линии, чтобы сделать ее более понятной. (я могу добавить конкретные значения параметров с помощью fig.text().)

I'd like the blue lines to be arrows

import matplotlib as mpl 
import matplotlib.pyplot as plt 
import numpy as np 
from itertools import product 

fig = plt.figure() 
plotGrid = mpl.gridspec.GridSpec(2, 2) 

x = np.linspace(0,10,10000) 
y = [j* np.sin(x + i) for i,j in product(range(2), range(1,3))] 

for i in range(4): 
    ax = plt.Subplot(fig, plotGrid[i]) 

    for sp in ax.spines.values(): 
     sp.set_visible(False) 

    ax.plot(x,y[i], color = 'r') 
    ax.set_xticks([]) 
    ax.set_yticks([]) 
    fig.add_subplot(ax) 

all_axes = fig.get_axes() 


#I would like these lines to be arrows 
blcorPosn = 0.08 #bottom corner position 
l1 = mpl.lines.Line2D([blcorPosn,blcorPosn], [1, blcorPosn], 
         transform=fig.transFigure, fig) 

l2 = mpl.lines.Line2D([blcorPosn, 1], [blcorPosn, blcorPosn], 
         transform=fig.transFigure, fig) 

fig.lines.extend([l1, l2]) 

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

Также это мое первое сообщение здесь, поэтому совет, как задавать вопросы, высоко ценится. Спасибо

+0

http://matplotlib.org/examples/pylab_examples/arrow_simple_demo.html –

+0

Другое дело, что, может быть, просто, возможно, поможет вам: http://matplotlib.org/users/pyplot_tutorial.html # аннотирования-текст – Drachenfels

ответ

0

Вы можете заменить Line2D вдоль каждой оси слегка измененным вызовом на патч FancyArrow. Основное различие заключается в том, что происхождение и назначение x,y углы заменены на начало координат x,y и расстояние x,y. Эти значения также передаются в качестве параметров непосредственно, а не в виде списков:

l1 = mpl.patches.FancyArrow(blcorPosn, blcorPosn, 1, 0, 
          transform=fig.transFigure, figure=fig) 

l2 = mpl.patches.FancyArrow(blcorPosn, blcorPosn, 0, 1, 
          transform=fig.transFigure, figure=fig) 

FancyArrow патч принимает несколько других параметров, чтобы позволить вам настроить внешний вид стрелки, включая width (для ширины линии), head_width и head_length.

Figure with axis arrows

Смежные вопросы