Jak mogę iść o usunięcie pola wokół xyplot
, zachowując oś znaków podziałki skali? W duchu minimalistycznym danych graficznej estetyki Edwarda Tuft za te linie osi są „atrament nie dane”, a może (powinien?) Być „usunięte”.Sterowanie kleszcze osi i linii osi oddzielnie na R siatkowej xyplot
library(lattice)
my.df <- data.frame(x=-10:10)
my.df$y <- my.df$x^2
xyplot(y~x,data=my.df)
Wydaje się, że parametry wyświetlacza krata (np axis.line$col
) sterują zarówno linii i oś kleszczy wraz:
xyplot(y~x,data=my.df,
par.settings=list(axis.line=list(col="transparent")))
... co jest nie jest to pożądany wynik, więc nie wygląda na to, że istnieje prosty sposób, aby wyłączyć linie, opuszczając skrzynkę.
Najlepszą udało mi się wymyślić jest hack brute-force, gdzie budować znaków podziałki ręcznie za pomocą 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)
}
)
ten jest zbliżony do pożądany wynik, ale jest sporo sprytu, aby uzyskać znaczną długość znaczników i przesunąć "ładną" odległość od punktów danych. Wartości te nie będą przekładać się z jednej grafiki na drugą. Ponadto należy zauważyć, że etykiety osi są teraz wyściełane zbyt daleko od znaków podziałki. Jestem pewien, że istnieje sposób na zmniejszenie tego dopełnienia, ale to tylko uczyniłoby kod jeszcze brzydszym i mniej przenośnym.
Więc jak można iść o tłumieniu tylko te linie, które składają się na „pole” wokół działki, pozostawiając ślady zaznaczyć i etykiety osi nienaruszone? Dodatkowe punkty, jeśli takie podejście może być również wykorzystywane do tłumienia niektóre, ale nie wszystkie linie (np opuścić lewą i dolne linie, ale stłumić górne i prawe linie).
To wygląda świetnie. Czy mógłbyś przekazać mały komentarz na temat tego, co robi każda linia funkcji osi i dlaczego to robisz?Znajduję dokumentację pomocy w funkcjach osi niskiego poziomu (np. 'Axis.default' nie jest bardzo pouczająca.) – mac
@mac, Okazało się, że było kilka niepotrzebnych zmian opcji kratek, a prawdziwą sztuczką wydaje się być podaj niestandardową funkcję osi jako formalny argument 'line.col'. – BenBarnes
Nicea. FWIW,' line.col = "black" 'jest potrzebne, ponieważ' panel.axis() 'domyślnie przyjmuje kolor linii z' trellis.par. get ("axis.line") ', które wcześniej ustawiłeś na' "transparent" '. –