2013-09-26 10 views
9

Czy można wygenerować kod generujący działki w dwóch wersjach tej samej figury, w różnych rozmiarach, z dokumentu .Rmd? Albo przez opcje porcji (nie widziałem niczego, co działa bezpośrednio tutaj), albo poprzez niestandardowy hak knitr? Najlepiej byłoby to zrobić z urządzeniem png.Tworzenie dwóch wykresów z tego samego fragmentu/polecenia w dzierżawie

Moja motywacja: chciałbym móc wydrukować figurę w jednym rozmiarze, która zmieściłaby się w skompilowanym dokumencie HTML, oraz inną postać, którą użytkownik mógłby pokazać po kliknięciu (pomyśl fancybox). Myślę, że będę w stanie obsłużyć skrypty niezbędne do wykonania tej pracy; jednak najpierw muszę przekonać R/knitr, aby wyprowadzić dwie wersje figury.

Chociaż jestem pewien, że istnieją sposoby obejścia problemu, najlepiej byłoby, gdyby istniała jakaś możliwość "zaćma" za kulisami, np. przez hak knitr. W ten sposób nie musimy robić nic specjalnego w kodzie R, po prostu modyfikujemy sposób analizowania/oceniania tego fragmentu.

Można również użyć grafiki SVG, która ładnie się skaluje, ale potem tracimy dobre wnioskowanie o dobrych rozmiarach dla etykiet działek, a grafika wektorowa nie jest świetna dla działek z wieloma punktami.

Odpowiedz

13

Myślałem, że nie było rozwiązania, i chciałem odmówić @baptiste, ale dostałem włamać się do mojego umysłu wkrótce. Poniżej znajduje się przykład R Markdown:

```{r test, dev='png', fig.ext=c('png', 'large.png'), fig.height=c(4, 10), fig.width=c(4, 10)} 
library(ggplot2) 
qplot(speed, dist, data=cars) 
``` 

See the [original plot](figure/test.png) and 
a [larger version](figure/test.large.png). 

Powodem Myślałem, że vectorized wersja dev nie praca: dla dev=c('png', 'png'), drugi plik png nadpisze pierwszy, ponieważ nazwa pliku rysunku jest taka sama. Wtedy zdałem sobie sprawę, że fig.ext również był wektoryzowany, a rozszerzenie pliku takie jak large.png tak naprawdę nie niszczy rozszerzenia pliku png; dlatego jest hack.

W każdym razie przez wektoryzowane wersje dev, fig.ext, fig.height i fig.width, można zapisać ten sam wykres do wielu wersji. Jeśli użyjesz deterministycznego wzorca dla rozszerzeń plików figur, myślę, że możesz także przygotować kod JavaScript, aby automatycznie dołączyć fantazyjne pudełka do obrazów.

+0

Idealnie! Dzięki Yihui! –

0

Jeśli tylko potrzebują małe i duże liczby, można po prostu zrobić:

<<plotSmall, fig.height=6, fig.width=8, out.width='.1\\textwidth'>>= 
plot(...) 
@ 
<<plotBig, fig.height=6, fig.width=8, out.width='.99\\textwidth'>>= 
plot(...) 
@ 

Albo prościej:

<<plotBoth, fig.height=6, fig.width=8, out.width=c('.1\\textwidth', '.9\\textwidth')>>= 
plot(...) 
plot(...) 
@ 

(na pewno o tym wiedzą, ale jest dla .Rmd LaTeX, podczas gdy .Rhtml jest dla html - składnia .Rhtml jest nieco inna.)

Powiązane problemy