2013-03-12 7 views
1

В настоящее время я пытаюсь нарисовать серию произвольных строк на графике matplotlib. Вот код, я использую:Осевая линия перекрытия в matplotlib

import matplotlib.pyplot as pyplot 

def center_origin(axis): 
    '''Center the axis in the middle of the picture''' 
    axis.spines['right'].set_color('none') 
    axis.spines['top'].set_color('none') 
    axis.xaxis.set_ticks_position('bottom') 
    axis.spines['bottom'].set_position(('data',0)) 
    axis.yaxis.set_ticks_position('left') 
    axis.spines['left'].set_position(('data',0)) 

def render(lines): 
    figure = pyplot.figure(figsize=(4,4)) 
    axis = figure.add_subplot(1, 1, 1) 

    center_origin(axis)   

    for (x1, y1), (x2, y2) in lines: 
     axis.add_line(pyplot.Line2D((x1, x2), (y1, y2), color='red')) 

    axis.set_xlim(-1.2, 1.2) 
    axis.set_ylim(-1.2, 1.2) 
    return figure 

if __name__ == '__main__': 
    render([((1, 0), (0, 1)), 
      ((1, 0), (-1, 0)), 
      ((1, 0), (0, -1))]).show() 
    raw_input('block > ') 

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

bad graph

В настоящее время, ось х покрывает до красной линии, которая должна выполняться из (1, 0) - (-1, 0). Я попытался разместить функцию center_origin как до, так и после того, как я нарисовал линии, но ничего не изменилось.

Как я могу сделать matplotlib рисовать мои линии над осью?

+1

Атрибут 'zorder' определяет порядок, в котором линии рисуются друг над другом. Попробуйте 'pyplot.Line2D ((x1, x2), (y1, y2), color = 'red', zorder = 1)'. Играйте со значением, вам может потребоваться нечто большее. – Robbert

+1

@Robbert - Спасибо, это сделал трюк! Если вы хотите написать это как ответ, я могу принять его/upvote. – Michael0x2a

ответ

4

Атрибут zorder определяет порядок, в котором линии нарисованы друг над другом. Попробуйте pyplot.Line2D((x1, x2), (y1, y2), color='red', zorder = 1). Играйте со значением, вам может потребоваться нечто большее.

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