Come posso rimuovere la casella intorno a xyplot
, mantenendo i segni di graduazione della scala degli assi? Nello spirito dell'estetica minimalista dei dati di Edward Tufte, queste linee degli assi sono "inchiostro non-dati" e possono (dovrebbero?) Essere "cancellati".Controllo delle tacche degli assi e delle linee degli assi separatamente su R lattice xyplot
library(lattice)
my.df <- data.frame(x=-10:10)
my.df$y <- my.df$x^2
xyplot(y~x,data=my.df)
Sembra che i parametri di visualizzazione traliccio (es axis.line$col
) controllare entrambe le linee e AXIS zecche insieme:
xyplot(y~x,data=my.df,
par.settings=list(axis.line=list(col="transparent")))
... che è non il risultato desiderato, quindi non sembra che ci sia un modo semplice per spegnere le linee mentre si lascia la scatola.
Il meglio che ho potuto venire in mente è un hack forza bruta, in cui ho costruito i segni di graduazione a mano con panel.segments
:
at.x=pretty(c(-10,10))
at.y=pretty(c(0,100))
xyplot(y~x,data=my.df,
par.settings=list(axis.line=list(col="transparent")),
scales=list(x=list(at=at.x,labels=at.x),
y=list(at=at.y,labels=at.y)),
panel=function(...){
panel.xyplot(...)
panel.segments(x0=at.x,x1=at.x,y0=-4,y1=-2)
panel.segments(x0=-11.5,x1=-11,y0=at.y,y1=at.y)
}
)
Questo è vicino alla risultato desiderato, ma è necessario un po 'di manipolazione per ottenere una lunghezza ragionevole dei segni di graduazione e compensare una "bella" distanza dai punti dati. Questi valori non verranno tradotti da un grafico all'altro. Inoltre, tieni presente che le etichette degli assi ora sono posizionate troppo lontano dai segni di graduazione. Sono sicuro che c'è un modo per ridurre quella imbottitura, ma questo renderebbe il codice ancora più brutto e meno portabile.
Quindi, come si può procedere eliminando solo le linee che compongono il "riquadro" attorno all'area del tracciato, lasciando intatti i segni di graduazione e le etichette degli assi? Punti bonus se questo approccio può anche essere usato per sopprimere alcune, ma non tutte le linee (ad esempio, lascia le linee sinistra e inferiore, ma sopprime le linee superiore e destra).
Questo sembra fantastico. Ti dispiacerebbe fornire un piccolo commento su cosa fa ogni linea della funzione dell'asse e perché lo stai facendo?Sto trovando la documentazione di aiuto sulle funzioni degli assi di basso livello (come 'axis.default' non sono molto illuminante. – mac
@mac, Si scopre che c'è stato un inutile cambio di opzioni a traliccio, e il vero trucco sembra essere quello di fornire la funzione asse personalizzata un argomento formale 'line.col'. – BenBarnes
Nice. FWIW,' line.col = "black" 'è necessario perché' panel.axis() 'di default prende il colore della linea da' trellis.par. get ("axis.line") ', che hai precedentemente impostato su' "transparent". –