аннотация matplotlib не выравнивает стрелку с текстом - PullRequest
0 голосов
/ 07 марта 2020

Этот код создает 5 графиков, каждый со стрелкой и меткой. Первоначально хвосты стрелок выровнены по левой стороне этикетки. Но по мере выполнения последовательных итераций стрелок и меток хвост стрелы мигрирует к правой стороне метки. Как мне прикрепить его к левой стороне этикетки?

%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
import time

segments=7
FIRST_max_Y=.25 *r

def logistic(r, x):
    return r * x * (1 - x)

def iterateX(some_r):
    x = np.linspace(0, 1,segments)

    fig, ax = plt.subplots(1, 1)
    plt.xlabel("X")
    plt.ylabel("logistic(1,x)")    

    for i in range(6):
        y=logistic(r, x)
        max_Y=np.amax(y)
        max_X=np.amax(x)
        mid_X=x[int(segments/2)]
        y_label_pos = max_Y * (1-(i/6)) 
        label =  f'r={r}\n'+ f'iteration = {i}'    
        print(f'\n\n mid_X= {round(mid_X,3)}   max_x= {round(max_X,3)}   max_Y={round(max_Y,3)}')

        ax.plot(x, y, color='red',alpha=.1+i/6)
        ax.annotate(label, xy=(max_X, max_Y),  xycoords='data',
            xytext=(1-(i*.15), y_label_pos), textcoords='data',
            arrowprops=dict(facecolor='black',alpha=.15+i/6, shrink=0.05),
            horizontalalignment='left', verticalalignment='bottom',
            rotation_mode='anchor')

        #df = pd.DataFrame(data=(x,y))
        #df=df.applymap('{:,.3f}'.format)
        #df.index = [ 'x', 'y'] 
        #print(df)
        print(f'data coordinates={max_X, max_Y}')
        print(f'text coordinates={1-(i*.15), y_label_pos}')
        x=y
        fig.canvas.draw()
        time.sleep(1)

r=2
iterateX(r)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...