2015-06-17 2 views
1

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

enter image description here

нотабене Эта цифра создается с использованием MATLAB, и я не могу сделать это в python-matplotlib. Спасибо.

+2

Вот ваше решение: http://stackoverflow.com/a/10952180/4716013 –

ответ

5

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

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.patches import Ellipse 

x = np.linspace(1,10,1000) 

flogs = [lambda x, a=a: np.log(a * x) for a in range(1,4)] 
fexps = [lambda x, a=a: np.exp(a * x) for a in [0.18,0.2]] 
funcs = flogs + fexps 

fig = plt.figure() 
ax = fig.add_subplot(111) 

for func in funcs: 
    ax.plot(x,func(x)) 


def add_ellipse(funcs, x): 
    # the y-coordinate of the center of our ellipse: 
    y = np.mean([funcs[i](x) for i in range(len(funcs))]) 
    # fix the width of the ellipse to this value: 
    w = 0.4 
    # find the height of the ellipse needed, and pad a bit: 
    h = np.ptp([funcs[i](x) for i in range(len(funcs))]) * 1.5 
    e = Ellipse(xy=(x,y), width=w, height=h, angle=0) 
    e.set_facecolor('none') 
    ax.add_artist(e) 

add_ellipse(fexps, 8.5) 
add_ellipse(flogs, 8) 

plt.show() 

enter image description here

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