Obecnie używam scale_brewer()
do wypełnienia i wyglądają pięknie w kolorze (na ekranie i na drukarce kolorowej), ale drukują stosunkowo jednolicie jako szarości, gdy używam drukarki czarno-białej. Przeszukałem ggplot2
dokumentację online, ale nie znalazłem nic o dodawaniu tekstur w celu wypełnienia kolorów. Czy istnieje oficjalny ggplot2
sposób na zrobienie tego lub czy ktoś ma hack, którego używa? Przez tekstury mam na myśli takie rzeczy, jak ukośne paski, odwrócone ukośne paski, wzory kropek itp., Które rozróżniają kolory wypełnienia po wydrukowaniu w czerni i bieli.
103
Odpowiedzi:
ggplot może używać palet colorbrewer. Niektóre z nich są przyjazne dla „kserokopii”. Więc czy coś takiego zadziała dla Ciebie?
w tym przypadku OrRd to paleta znaleziona na stronie colorbrewer: http://colorbrewer2.org/
źródło
Hej, ludzie, oto mały hack, który rozwiązuje problem tekstury w bardzo prosty sposób:
ggplot2: spraw, aby obramowanie jednego paska było ciemniejsze niż inne, używając R.
EDYCJA: Wreszcie znalazłem czas, aby podać krótki przykład tego hacka, który pozwala na co najmniej 3 typy podstawowego wzorca w ggplot2. Kod:
Produkuje to:
Nie jest super ładne, ale to jedyne rozwiązanie, o którym mogę pomyśleć.
Jak widać, przedstawiam bardzo podstawowe dane. Aby uzyskać pionowe linie, po prostu tworzę ramkę danych zawierającą zmienną, do której chciałem dodać pionowe linie, i wielokrotnie poprawiałem granice wykresu, zmniejszając za każdym razem szerokość.
Podobnie dzieje się z liniami poziomymi, ale dla każdego przerysowania potrzebna jest nowa ramka danych, w której odjęłam wartość (w moim przykładzie „5”) od wartości związanej z interesującą nas zmienną. Skutecznie obniża wysokość drążka. Jest to trudne do osiągnięcia i mogą istnieć bardziej usprawnione podejścia, ale to ilustruje, jak można to osiągnąć.
Wzór siatki jest połączeniem obu. Najpierw wyciągnąć pionowych linii, a następnie dodać linie poziome ustawienie
fill
wfill='transparent'
celu zapewnienia, że pionowe linie nie są narysowane na drugą.Do czasu aktualizacji wzoru mam nadzieję, że niektórym z was będzie to przydatne.
EDYCJA 2:
Dodatkowo można dodać ukośne wzory. Dodałem dodatkową zmienną do ramki danych:
Następnie utworzyłem nową ramkę danych do przechowywania współrzędnych dla ukośnych linii:
Stamtąd dodałem geom_paths do powyższego ggplot, z których każdy wywołuje inne współrzędne i rysuje linie na żądanym pasku:
Skutkuje to:
Jest trochę niechlujny, ponieważ nie zainwestowałem zbyt wiele czasu w ustawienie linii idealnie pod kątem i rozstawionych, ale powinno to służyć jako dowód koncepcji.
Oczywiście linie mogą przechylać się w przeciwnym kierunku, a ponadto jest miejsce na siatkowanie ukośne, podobnie jak w przypadku siatki poziomej i pionowej.
Myślę, że to wszystko, co mogę zaoferować na froncie wzoru. Mam nadzieję, że ktoś znajdzie dla niego zastosowanie.
EDYCJA 3: Słynne ostatnie słowa. Wymyśliłem inną opcję wzoru. Tym razem za pomocą
geom_jitter
.Ponownie dodałem kolejną zmienną do ramki danych:
I zamówiłem, jak chcę, aby każdy wzór był prezentowany:
Następnie utworzyłem kolumnę zawierającą liczbę skojarzoną z zamierzonym słupkiem docelowym na osi x:
Po nich następują kolumny zawierające pozycje na osi Y „bąbelków”:
Na koniec dodałem
geom_jitter
s do powyższego ggplot, używając nowych kolumn do pozycjonowania i ponownego używania „Punktów”, aby zmieniać rozmiar „bąbelków”:Za każdym razem, gdy wykres jest uruchamiany, jitter ustawia `` bąbelki '' w inny sposób, ale oto jedno z ładniejszych wyników, jakie miałem:
Czasami „bąbelki” będą drgać poza granicami. Jeśli tak się stanie, uruchom ponownie lub po prostu wyeksportuj w większych wymiarach. Więcej bąbelków można nanieść na każdy przyrost na osi y, co wypełni więcej pustej przestrzeni, jeśli sobie tego życzysz.
To daje do 7 wzorów (jeśli uwzględnisz przeciwległe pochylone ukośne linie i ukośną siatkę obu), które można zhakować w ggplot.
Jeśli ktoś może coś przemyśleć, możesz zasugerować więcej.
EDYCJA 4: Pracowałem nad funkcją opakowującą, aby zautomatyzować kreskowanie / wzorce w ggplot2. Po rozszerzeniu funkcji opublikuję link, aby umożliwić stosowanie wzorców na wykresach facet_grid itp. Oto wyjście z danymi wejściowymi funkcji dla prostego wykresu słupków jako przykład:
Dodam ostatnią edycję, gdy będę mieć funkcję gotową do udostępnienia.
EDYCJA 5: Oto link do funkcji EggHatch, którą napisałem, aby trochę ułatwić proces dodawania wzorców do wykresów geom_bar.
źródło
Obecnie nie jest to możliwe, ponieważ grid (system graficzny używany przez ggplot2 do rysowania) nie obsługuje tekstur. Przepraszam!
źródło
Możesz użyć pakietu ggtextures autorstwa @claus wilke do rysowania prostokątów i słupków z teksturą za pomocą
ggplot2
.Możesz również połączyć to z innymi geomami:
źródło
Właśnie odkryłem pakiet o nazwie
ggpattern
( https://github.com/coolbutuseless/ggpattern ), który wydaje się być dobrym rozwiązaniem tego problemu i dobrze integruje się z przepływem pracy ggplot2. Chociaż rozwiązania wykorzystujące tekstury mogą działać dobrze w przypadku prętów ukośnych, nie generują grafiki wektorowej i dlatego nie są optymalne.Oto przykład wzięty prosto z repozytorium github ggpattern:
co prowadzi do tego wykresu:
Jeśli tylko niektóre paski powinny być w paski,
geom_col_pattern()
mapattern_alpha
argument, który może być użyty do całkowitego przezroczystości niektórych niechcianych pasków.źródło
Myślę, że praca Docconcoct jest świetna, ale teraz nagle wygooglowałem specjalny pakiet --- Patternplot . Nie widziałem kodu wewnętrznego, ale winieta wydaje się przydatna.
źródło
ggrough
może Cię zainteresować: https://xvrdm.github.io/ggrough/źródło
Przydatne może być utworzenie fikcyjnej ramki danych, której kontury odpowiadają „teksturom”, a następnie użycie geom_contour. Oto mój przykład:
A oto wynik: cieniowana działka z liniami
(linie powinny być wygładzone)
źródło