Domanda

Ho una domanda di follow-up a questa .

È possibile semplificare la generazione della figura disponendo di più script Python che funzionano su diverse parti della figura?

Ad esempio, se ho le seguenti funzioni:

  

Funzione A: disegna un istogramma di qualcosa
  Funzione B: disegna una casella con un testo al suo interno
  FunzioneC: Disegna una trama di qualcosa C
  Funzione D: Disegna una trama di qualcosa D

Come posso fare per riutilizzare le funzioni sopra in diversi script? Se volessi, ad esempio, creare una figura con un istogramma con una trama di qualcosa di C, chiamerei in qualche modo FunctionA e FunctionC dal mio script. Oppure, se volessi una figura con i due grafici, chiamerei FunctionC e FunctionD.

Non sono sicuro di spiegarmi chiaramente, ma un altro modo di porre questa domanda è questo: come faccio a passare un oggetto figura a una funzione e quindi fare in modo che la funzione attiri qualcosa sull'oggetto figura passato e poi restituirlo allo script principale per aggiungere altre cose come il titolo o qualcosa del genere?

È stato utile?

Soluzione

Qui vuoi usare gli oggetti dell'artista e passarli secondo necessità per le funzioni:

import numpy as np
import matplotlib.pyplot as plt

def myhist(ax, color):
    ax.hist(np.log(np.arange(1, 10, .1)), facecolor=color)

def say_something(ax, words):
    t = ax.text(.2, 20., words)
    make_a_dim_yellow_bbox(t)

def make_a_dim_yellow_bbox(txt):
    txt.set_bbox(dict(facecolor='yellow', alpha=.2))

fig = plt.figure()
ax0 = fig.add_subplot(1,2,1)
ax1 = fig.add_subplot(1,2,2)

myhist(ax0, 'blue')
myhist(ax1, 'green')

say_something(ax0, 'this is the blue plot')
say_something(ax1, 'this is the green plot')

plt.show()

 alt text

Altri suggerimenti

Okey, ho capito come fare. Era molto più semplice di quello che avevo immaginato. Richiedeva solo un po 'di lettura qui con figure e assi classi.

Nel tuo script principale:

import pylab as plt  
import DrawFns  
fig = plt.figure()  
(do something with fig)  
DrawFns.WriteText(fig, 'Testing')  
plt.show()

Nel tuo DrawFns.py:

def WriteText(_fig, _text):  
[indent]_fig.text(0, 0, _text)

E questo è tutto! E posso aggiungere più funzioni in DrawFns.py e chiamarle da qualsiasi script purché siano incluse nella chiamata import . : D

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top