2017-02-22 41 views
6

Staram się uzyskać wizualnie akceptowalny gradient kolorów w R (zobacz here, aby uzyskać szczegółowy opis mojego konkretnego przypadku). Krótko mówiąc, problem polega na tym, że podczas wyświetlania w oknie R wygląda dobrze, pliki PDF pokazują cienkie, białe linie między segmentami używanymi do generowania gradientu.Gradienty kolorów w R w pliku PDF i bitmapie wyjściowym

n <- 100 
cc <- colorRampPalette(c("red", "blue"))(n) 
plot.new() 
par(mar=rep(0,4)) 
sapply(1:n, function(i) rect((i-1)/n, 0, i/n, 1, col=cc[i], border=NA)) 
dev.copy2pdf(file="test.pdf") 

Oto wynik:

screenshot 1

Widać cienkie, białe linie. Ich pozycjonowanie zależy od zoomu, więc zakładam, że są one artefaktem sposobu wyświetlania pliku PDF. Tutaj to samo w innym zoom:

screenshot 2

Niestety, te linie są również widoczne na wydruku. Domyślam się, że problem może wynikać z tego, w jaki sposób współrzędne w pliku PDF są zaokrąglane, gdy grafika wektorowa jest renderowana do bitmapy w celu wyświetlenia lub wydrukowania.

Możliwe rozwiązanie polega na użyciu segmentów, które nakładają się na siebie. Jest to dopuszczalne tylko w przypadku jednolitych kolorów; niestety, chciałbym również użyć przezroczystych kolorów w gradientach.

Co mogę zrobić, aby moje wyniki w formacie PDF były lepsze?

+0

można ustawić kolor obramowania na zdrowy, jako segment 'border = cc [i]' – user20650

+0

nie, ten sam problem z przezroczystością. Właściwie to próbowałem to wcześniej rozwiązać. Oto dlaczego to nie zadziałało: http://stackoverflow.com/questions/41088751/riverplot-package-in-r-output-plot-covered-in-gridlines-lub-outlines – January

+0

Uruchomiłem twój kod, ale ja don nie widzisz białych linii. Ani w urządzeniu x11, ani w wyjściu pdf (Foxit pdf)! spróbuj z innymi aplikacjami pdf – Faridcher

Odpowiedz

2

To wydaje się być problemem wyłącznie ze względu na mechanizm renderujący. Np .:

enter image description here

Nie wierzę, że coś można zmienić w pliku PDF do zasadniczo rozwiązać problem. W moim przypadku Adobe Acrobat wyglądał dobrze na każdym poziomie powiększenia, z wyjątkiem bardzo dużego zoomu (musiałem przejść do 3200% zoomu, aby zobaczyć białe linie).

Wygląda na to, że Chrome i Microsoft Edge działają dobrze.

+0

Dzięki! to było pomocne. – January

0

Wypróbowałeś to rozwiązanie? Pierwszy prostokąt zajmie więcej miejsca, a drugi zostanie wykreślony na pierwszym, eliminując w ten sposób białe linie za nim. Pdf że Ive got nie pokazuje białe linie

n <- 100 
cc <- colorRampPalette(c("red", "blue"))(n) 
plot.new() 
par(mar=rep(0,4)) 
sapply(1:n, function(i) rect((i-1)/n, 0, (i + 1)/n, 1, col=cc[i], border=NA)) 
dev.copy2pdf(file="test.pdf") 

enter image description here ta jest powiększona o 6400 procent

+1

Tak, przeczytaj akapit zaczynający się od "Możliwy" w moim oryginalnym wpisie. Problem polega na tym, że dostajesz ciemne paski, jeśli używasz przezroczystych kolorów. – January