2013-04-24 16 views
9

Gnuplot fornisce un numero di stili punto da utilizzare nei grafici a dispersione, ad esempio una croce, una stella, un quadrato, un cerchio, ecc. I tipi di punti disponibili possono essere demonstrated utilizzando il comando test.Gnuplot: utilizzo di forme punto personalizzate, con voce legenda

Tuttavia, per un'applicazione specifica, ho bisogno di simboli diversi e ho bisogno di voci di legenda che mostrano questi simboli.

In particolare, ho bisogno di più di quattro simboli che possono essere tracciati sia in modo contornato che in stato pieno (ad esempio triangoli rivolti a sinistra o a destra, parallelogrammi o rettangoli non quadrati).

Ci sono un certo numero di approcci per utilizzare altre forme (ciascuna con alcuni requisiti verso il terminale, ad esempio supporto unicode):

  • using PNG images
  • usando set label '□' at 3,4 per ogni punto, dove □ può essere sostituito da qualsiasi carattere unicode, come ◁, ▶, ▭, ▮, ecc)
  • utilizzando plot ... with labels e fornendo un carattere unicode come etichetta

Il problema con tutti questi approcci è che non riesco a ottenere una voce corretta (chiave), incluso il simbolo.

ho considerato tramando la leggenda me stesso, ma ci sono due motivi per cui non credo che questo sia fattibile:

  • Per tracciare la leggenda alla destra del grafico (o al minore proprio all'interno il grafico), avrei bisogno di calcolare la larghezza della legenda, che dipende dal tipo di carattere.
  • Alcuni dei grafici possono includere sia una linea che punti (come using linespoints per i normali tipi di punti Gnuplot), che devono entrambi essere mostrati nella legenda.

sto generando l'ingresso Gnuplot file a livello di codice, in modo un approccio che elenca esplicitamente tutti i punti (come l'approccio set label di cui sopra), o che richiede alcuni calcuations, è OK.

risposta

10

questo non sarà una risposta, perché ho intenzione di dirvi di cambiare il vostro terminale ... lo so ...

Non c'è modo di aggiungere forma punto definito dall'utente in gnuplot ancora, ma il terminale PostScript consente circa 70 diversi: Postscript point typeshttp://www.cp.cmc.osaka-u.ac.jp/~fumiko/tips/gnuplot_pt.jpg

Nella discussione seguente, si afferma che non esiste un meccanismo generale per aggiungere il tipo di punto definito dall'utente. E vengono con la soluzione che hai dato nella tua domanda. https://groups.google.com/forum/?fromgroups=#!topic/comp.graphics.apps.gnuplot/in57UNxG2o0

Penso che un modo per raggiungere il vostro obiettivo potrebbe essere quello di

  1. Usa PostScript per elaborare un file .ps "human-readable", utilizzando i tipi di punti predefiniti.
  2. "post-process" (= parse) il file .ps (suona come Inception per me) per cambiare il vecchio tipo di punto predefinito brutto in qualcosa che ti piace, dai caratteri unicode alle forme disegnate a casa.
  3. ps2pdf o ps2somethingyoulike il file .ps elaborato.

ho paura che dovrò affrontare lo stesso problema, in modo da far sapere al mondo se si trova una soluzione più facile :)

+0

Mi piace l'idea, e farò un tentativo. Dovrò trovare un buon modo per convertire il postscript nel mio formato di destinazione, però - probabilmente è facile su Linux, ma ho bisogno di farlo su Windows e ho bisogno di produrre EMF (per Word) e PDF (per pdfLaTeX) . –

+1

Invece di modificare i simboli predefiniti, è possibile anche definire i propri simboli e modificare l'invocazione del simbolo (sembra '3747 2576 CircleF') per utilizzare la propria definizione. –

+1

I simboli Unicode potrebbero essere un problema, tuttavia: ho appena eseguito un test rapido e sembra che né IrfanView né Inkscape rendano correttamente i simboli unicode nelle etichette. Potresti usare il font Symbol per le lettere greche, ma avrò bisogno anche di altri caratteri Unicode. –

2

se qualcuno vuole pasticciare con il percorso postscritp ecco un semplice esempio :

Ogni simbolo è definito in base al nome (vedere la tabella in risposta di Pascali) nel file ps come ad esempio:

/BoxF { 
     ....3 or 4 lines of terse code ... 
     } def 

sostituire con la propria definizione: Questa è una lettera maiuscola Pi.

/BoxF { 
stroke gsave moveto % required, this finishes prior line and moves to point 
0 30 rmoveto % nudge symbol to get it centered properly 
/Symbol findfont 120 scalefont setfont (P) Cshow 
grestore 
    } def 

Questo semplice esempio potrebbe essere necessario i numeri (dimensione del carattere) ottimizzato per i diversi tipi di grafici ..

Se si desidera utilizzare i caratteri che non sono noti dal vostro interprete PostScript è necessario manualmente includerli

+0

BoxF è pt 5 a proposito. I numeri sono scesi di uno in quella tabella. – agentp

2

Simile alla risposta di Pascail, è possibile farlo anche con SVG anziché Postscript.

SVG è basato su XML e può essere o meno più semplice da elaborare rispetto a Postscript (utilizzando una libreria XML). Supporta anche unicode.