как сделать график, где кривые могут перекрываться?

Я пытаюсь сделать сюжет, похожий на этот

введите здесь описание изображения

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

Когда я пытался сделать этот график в Matlab, но я не знаю, как делать такие легенды. Да и двойное бревно с сеткой тоже полная лажа.

Как я могу сделать этот график, используя matplotlib или Matlab? Является ли matplotlib более гибким?


person LWZ    schedule 10.02.2013    source источник
comment
вы можете сделать это с помощью annotate   -  person tacaswell    schedule 10.02.2013


Ответы (1)


Просто используйте annotate, это должно дать вам 90% результата:

x = np.linspace(0,1000)
y = x ** -2

figure()
ax = gca()
ax.loglog(x,y)
ax.grid(True)
ax.grid(True, which='minor')

ax.annotate('a1', (x[15], y[15]),
            backgroundcolor='w',
            color='b',
            va='center',
            ha='center',
            bbox=dict(boxstyle="round", color='b'),)

annotate doc и примеры. Получить круги может быть сложно. Если вы действительно хотите использовать круги, я бы посоветовал отправить запрос функции на github. (Похоже, несколько часов копались в внутренностях mpl, чтобы добавить ограничивающие рамки в виде эллипса).

person tacaswell    schedule 10.02.2013
comment
Интересно, я не знал, что вы можете построить график только с помощью объекта оси ax.loglog(x,y). - person LWZ; 11.02.2013