#!/usr/bin/env python # coding: utf-8 # Matplotlib -- popisky, značky # ================================= # # Text v obrázku a popisky os # ------------------------------ # # * text: # * popisky os: # * vodící linky: # In[1]: f=logspace(0,4,1000) C=1e-6 R=3e3 au=(1./(1j*2*pi*f*C)) / (R+(1./(1j*2*pi*f*C))) fig=figure() ax=subplot(111) semilogx(f,20*log10(abs(au))) grid(True,'both') text(200,-10,'-20dB/dek',size=20,rotation=-50) figtext(0.8,0.05,'OSA X') figtext(0.05,0.8, 'OSA Y',rotation=90) l = plt.axvline(x= 1/(2*pi*R*C), ymax=0.95, linestyle='--', linewidth=2, color='#ee55aa') l = plt.axhline(y=-3, xmin=0, xmax=0.8, linestyle='-.', linewidth=2, color='g') t=text(1/(2*pi*R*C),-55,'$f_m$',size=16) #print ax.get_yticklabels() # přidám si speciální místa na osu y yticks(list(yticks()[0]) + [-12,-25]) print yticks()[0] # přidám ještě speciálnější popisek yticks(list(yticks()[0]) + [-3], list(yticks()[0]) + ['pokles o -3dB'] ) # yticks()[0] jsou tiky # yticks()[1] jsou popisky -- objekty typy Text; takže volám Text.set_color() na poslední přidaný prvek yticks()[1][-1].set_color('r') # ... nebo jíný způsob -- chová se tovhu jinak #ax.set_yticks(ax.get_yticks()+[-3] ) # do grafu přidám další graf ax=fig.add_axes([0.7,0.4,0.3,.4], axisbg='yellow', alpha=0.1) ax.set_yticks([-3]) ax.set_yticklabels(['-3']) ax.grid() ax.plot(f,20*log10(abs(au))) # Graf v grafu # ----------------- # In[2]: import numpy as np from matplotlib import pyplot as plt from scipy import randn, convolve #data t = np.arange(0.0, 20.0, 0.001) r = np.exp(-t[:1000]/0.05) x = randn(len(t)) s = convolve(x,r)[:len(x)]*0.001 theta = 2 * np.pi * t # fig = plt.figure(figsize=(7, 6)) #main plt.plot(t, s) plt.axis([0, 1, np.amin(s), 2.5*np.amax(s)]) plt.xlabel('xlabel') plt.ylabel('ylabel') #polar ax = fig.add_axes([0.2, 0.47, 0.30, 0.40], polar=True, axisbg='yellow') ax.plot(theta, t, color='blue', lw=3) ax.set_rmax(1.0) plt.grid(True) plt.show() # Různé styly šipek # ------------------ # # * Použitelná je IMHO FancyArroPatch: # In[3]: import matplotlib.pyplot as plt import matplotlib.patches as mpp fig = plt.figure(figsize=(7,4)) ax=fig.add_subplot(111) ax.axis([520,580, 0,0.2]) a = plt.arrow(550,0.06,15,0.1, width=0.01, head_length=1.) ax.add_patch(a) b = mpp.YAArrow(fig, (555,0.16), (540,0.06), width=0.01, headwidth=0.03) ax.add_patch(b) c = mpp.FancyArrowPatch((530,0.06), (545,0.16), arrowstyle='<|-|>', lw=2, mutation_scale=50, color='k') ax.add_patch(c) plt.show() # Ja na text, šipky, popisky # -------------------------- # # * boxstyle (když chci text do rámečku): # * FancyArroPatch: # In[1]: import matplotlib.patches as mpp ax=subplot(111) axis([0,300, 0,400]) grid(True,'both') # linestyle or ls [‘solid’ | ‘dashed’ | ‘dashdot’ | ‘dotted’] c = mpp.FancyArrowPatch((50,300), (150,200), arrowstyle='<|-|>', lw=2, linestyle='dotted', mutation_scale=20, color='green', label='popisek', alpha=0.5) ax.add_patch(c) legend() text(90,240,'BB',size=32) # i anntate použíévá class matplotlib.patches.FancyArrowPatch annotate('Ahoj', xy=(200,150),size=20, xytext=(250,200), arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=0.2", fc="w") ) annotate('Q', xy=(100,100),size=20, xytext=(150,100), arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=0", ), ) annotate('B', xy=(200,100),size=20, xytext=(150,100), arrowprops=dict(arrowstyle="->",connectionstyle='bar') , horizontalalignment='right', verticalalignment='top' ) #################### # Bubliny bbox_props = dict(boxstyle="rarrow,pad=0.3", fc="cyan", ec="b", lw=2) t = ax.text(150,300, "Direction", ha="center", va="center", rotation=45, size=15, bbox=bbox_props) bbox_props = dict(boxstyle="round,pad=0.3", fc=".9", ec="b", lw=2) t=annotate(u'Carsonův odhad', xy=(150,120),size=16, xytext=(40,20),bbox=bbox_props, arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=-1.5", fc="w") ) # In[4]: ax=subplot(111) X = np.linspace(-np.pi, np.pi, 256,endpoint=True) C,S = np.cos(X), np.sin(X) plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine") plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine") #############Přesnun popisků na "klasické" místo #ax = gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data',0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data',0)) ############# Popisky os xlim(X.min()*1.1, X.max()*1.1) xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$']) ylim(C.min()*1.1,C.max()*1.1) yticks([-1, +1], [r'$-1$', r'$+1$']) t = 2*np.pi/3 ## modrá čárkovaná čára plot([t,t],[0,np.cos(t)], color ='blue', linewidth=1.5, linestyle="--") ## modrý puntík scatter([t,],[np.cos(t),], 50, color ='blue') ## popisek k modrému puntíku annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$', xy=(t, np.sin(t)), xycoords='data', xytext=(+10, +30), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) ### červená čárkovaná čára plot([t,t],[0,np.sin(t)], color ='red', linewidth=1.5, linestyle="--") ## červený puntík scatter([t,],[np.sin(t),], 50, color ='red') ## červený popisek annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$', xy=(t, np.cos(t)), xycoords='data', xytext=(-90, -50), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) legend(loc='upper left') # savefig("../figures/exercice_9.png",dpi=72) #show() # In[ ]: