2009-07-22 15 views
5

Mam histogram z kilkoma setkami pozycji, dla których wykonuję działkę Q-Q. Powoduje to, że EPS ma wielkość 2,5 megabajta. Jest to zbyt wiele dla postaci, która ma być zawarta tylko w publikacji i nie będzie wyświetlana przy powiększeniu 100x.Zmniejsz rozmiar działek w formacie EPS

Czy jest jakaś opcja w R, aby w jakiś sposób uzyskać mniejszy EPS? Szukałem dokumentów bezskutecznie. A może moja najlepsza opcja, powiedzmy, rasteryzuj ją po 300 dpi? Jeśli tak, to jakie są zalecenia dotyczące narzędzia do tego zadania?

Kod R dla działki to nic nadzwyczajnego:

postscript(filename) 
qqnorm(n, main=title)) 
qqline(n) 
dev.off() 

EDIT: Doh! Moje pytanie dotyczyło wyprowadzania EPS, a następnie konwertowania go na format rastrowy. Kiedy oczywiście mogłem po prostu wygenerować PNG na pierwszym miejscu z R.

Odpowiedz

3

I Właśnie wypróbowałem kilka rzeczy, które nie działały - włączam je tutaj, by ratować innych marnujących czas. Dla porównania ustawiłem n <- rnorm(1e5) w powyższym kodzie.

Rzeczy, które nie działają:

  1. Ustawianie colormodel <- "gray".

  2. Używanie innej wartości pch. (Niektóre inne wartości zwiększały rozmiar pliku, ale nie znalazłem żadnego, który je zmniejszył.)

  3. Ustawienie useKerning = FALSE.

  4. Zmiana ustawień szerokości i wysokości.

  5. Używanie pdf zamiast postscriptu.

  6. Korzystanie z CarioPS z pakietu Cairo.

W związku z tym uważam, że jest mało prawdopodobne, aby można było zmniejszyć rozmiar pliku przy użyciu formatu wektorowego. Oznacza to, że będziesz musiał użyć formatu rastrowego (najprawdopodobniej PNG).

1

Cóż, EPS po prostu zawiera instrukcje narysowania wykresu, więc jego rozmiar w dużym stopniu zależy od tego, ile punktów danych masz. Prawdopodobnie jest on mniejszy w pliku PDF, w którym używana jest kompresja, ale najlepszym rozwiązaniem może być użycie formatu rastrowego, który może być mniejszy.

Podejrzewam, że EPS R generuje jest już tak mały, jak tylko może (jestem pewien, że ma własną funkcję w Postscriptu do obsługi drukowania danych za pomocą jednego znaku itp., Ponieważ jest to dość powszechne ćwiczyć). Wątpię, że istnieje wiele sposobów na zoptymalizowanie tego. Mogę się jednak pomylić, ale jest szansa, że ​​R jest jedynym programem, który ma wystarczająco dużo informacji wysokiego poziomu, aby rozsądnie skompresować dane wyjściowe.

+0

Wyniki w formacie PDF w pliku o rozmiarze 1 mb, wciąż za duże. Sądzę, że mógłbym zastosować próbkowanie zbioru danych w celu zmniejszenia liczby punktów, ale trudno nie stracić kilku interesujących punktów odstających. –

3

Masz trzy opcje.

  1. zaakceptować duży rozmiar pliku
  2. zapisać plik w formacie wektorowym jak non-png
  3. Tworzenie QQplot na losowej próbce danych. Losowa próbka o kilkuset punktach powinna dać podobny QQplot.

    dopisek (nazwa pliku) Próbka < - próbki (n = rozmiar 200) qqnorm (SAMP, główny = tytuł)) qqline (Próbka) dev.off()

2

W tej dyskusji na liście R link text dowiedziałem się o pdftk. Z n= 1e5 zmniejszono rozmiar pdf z 6mb do 600k. Całkiem fajnie!

2

w widoku GS, przekonwertuj nasze pliki na format PDF, a następnie przekonwertuj na PS lub EPS ponownie, ostateczny rozmiar pliku zostanie zmniejszony 5-7 razy.

+0

Czy możesz podać linię kodu bash, aby to zrobić? – toxicate20

1

PO rozwiązał problem poprzez bezpośrednie wygenerowanie pliku PNG. Musiałem użyć EPS, ponieważ PNG i inne formaty miały aliasy obrazu. W każdym razie musiałbym przekonwertować na EPS, aby dołączyć go do pliku LaTeX.

Użyłem GIMP do importu pliku eps 10 MB wygenerowanego z funkcji obrazu R. Następnie obrócono, spłaszczono i zapisano jako plik eps 300 KB. Spłaszczanie łączy wszystkie warstwy w jedną warstwę i usuwa kanał alfa w celu uzyskania przezroczystości. Łatwo obsługiwane przez LaTeX po tej transformacji.

Przed transformacją obraz renderował się bardzo wolno w Ghost Script i nie mógł być w ogóle renderowany w programie epsviewer. GIMP używa Ghost Script jako interfejsu, więc importowanie jest powolne, ale po zaimportowaniu całe przetwarzanie i rendering były bardzo szybkie.

Powiązane problemy