2013-05-31 7 views
5

Sono familiare con MATLAB, ma relativamente nuovo a r. Ho uno script r che produce molte finestre grafiche diverse e richiede un po 'di tempo tra ognuna. Mentre è in corso, tendo a lavorare su altre cose. Il problema è che ogni volta viene prodotta una nuova finestra grafica, ruba l'attenzione, reindirizzando l'input della tastiera da quello che sto facendo. C'è un modo per impedire il furto del focus quando viene prodotto un grafico?Blocca la messa a fuoco quando si avvia una nuova trama grafica in

Ho cercato ovunque ma non ho trovato alcun riferimento a questo. Sto lavorando in linux.

Qualsiasi aiuto molto apprezzato.

Grazie

+0

Come si crea ciascuna finestra del grafico? La stessa finestra viene riutilizzata di default ... –

+1

Più ci penso, perché ne hai bisogno? Hai intenzione di creare un gruppo di finestre a trama aperta? O vuoi semplicemente salvare quei grafici usando qualcosa come 'pdf'? – Thomas

risposta

1

Se wmctrl è installato sul sistema, è possibile evitare di perdere la concentrazione, ridefinendo la funzione plot in questo modo:

plot <- function(...) { 
    graphics::plot(...) 
    system("wmctrl -a :ACTIVE:") 
} 

Sembra funzionare abbastanza bene, nella window manager Fluxbox almeno. Ho provato diversi scenari come passare a una finestra diversa durante un lungo calcolo prima di chiamare plot e aprire più trame.

Inserisci nel tuo .Rprofile se vuoi che persista.

+0

Questo sembra promettente - non ho wmctrl sul mio sistema (opensuse con gnome) ma lo installerò e testò e postare di nuovo qui se funziona. Grazie. – user1218475

3

solo su Windows: Prova a mettere una bringToTop(-1) nella funzione:

z <- function() { 
    plot(1:3) 
    bringToTop(-1) 
} 
z() 

Sarà rubare temporaneamente messa a fuoco, ma poi restituirlo.

Un'altra strategia su Windows:

z <- function(){ 
    windows(restoreConsole=TRUE) 
    plot(1) 
} 
z() 

Sto ancora pensando qui ...

+0

'bringToTop' è una funzione specifica di Windows. Non esiste nelle installazioni R su linux. –

+1

'windows' è anche (sorpresa, sorpresa) specifico per Windows. ;) –

2

Se siete più interessati a fare qualcosa di diverso, mentre le trame sono prodotte quindi vorrei suggerire l'apertura di un dispositivo pdf in modo che tutti i grafici vadano in un file pdf in background e non interferiscano con qualsiasi altra cosa tu stia facendo. Quindi, quando sei pronto a guardare attraverso i grafici, apri il file pdf e guarda i grafici (e puoi facilmente tornare ai grafici precedenti in questo modo).

+0

Grazie - questa è una buona idea, ma non è proprio quello che sto cercando in quanto i grafici vengono anche inviati via email separatamente, uno per email. – user1218475

+0

@ user1218475, quindi invia ciascun grafico al proprio file. Vedere l'argomento 'onefile' su' pdf' o altri dispositivi di tracciamento basati su file, o usare 'dev.off' dopo ogni trama e controllare i nomi dei file da soli. Se lo scopo principale è di inviare per e-mail i grafici, inviarli direttamente ai file sarà più efficiente rispetto a far apparire molte finestre e dover lavorare successivamente con ciascuna finestra. –

Problemi correlati