No momento, estou usando scale_brewer()
para preenchimento e eles ficam lindos em cores (na tela e por meio de impressora colorida), mas imprimem relativamente uniformemente em tons de cinza ao usar uma impressora em preto e branco. Eu pesquisei onlineggplot2
documentação , mas não vi nada sobre adicionar texturas para preencher cores. Existe uma ggplot2
maneira oficial de fazer isso ou alguém tem um hack que usa? Por texturas, quero dizer coisas como barras diagonais, barras diagonais reversas, padrões de pontos, etc., que diferenciam as cores de preenchimento quando impressas em preto e branco.
103
Respostas:
O ggplot pode usar paletas colorbrewer. Alguns deles são adequados para "fotocópia". Então, talvez algo assim funcione para você?
neste caso, OrRd é uma paleta encontrada na página do colorbrewer: http://colorbrewer2.org/
fonte
Ei pessoal, aqui está um pequeno hack que aborda o problema da textura de uma maneira muito básica:
ggplot2: tornar a borda em uma barra mais escura do que as outras usando R
EDIT: Finalmente encontrei tempo para dar um breve exemplo deste hack que permite pelo menos 3 tipos de padrão básico no ggplot2. O código:
Produz isto:
Não é muito bonito, mas é a única solução em que consigo pensar.
Como pode ser visto, produzo alguns dados muito básicos. Para obter as linhas verticais, simplesmente crio um quadro de dados para conter a variável à qual queria adicionar linhas verticais e redesenho as bordas do gráfico várias vezes, reduzindo a largura a cada vez.
Uma coisa semelhante é feita para as linhas horizontais, mas um novo quadro de dados é necessário para cada redesenho onde eu subtraí um valor (em meu exemplo '5') do valor associado à variável de interesse. Reduzindo efetivamente a altura da barra. Isso é difícil de conseguir e pode haver abordagens mais simplificadas, mas isso ilustra como isso pode ser alcançado.
O padrão de malha é uma combinação de ambos. Em primeiro lugar, desenhe as linhas verticais e, em seguida, adicione a configuração das linhas horizontais
fill
comofill='transparent'
para assegurar que as linhas verticais não são desenhados de novo.Até que haja uma atualização de padrão, espero que alguns de vocês achem isso útil.
EDIT 2:
Além disso, padrões diagonais também podem ser adicionados. Eu adicionei uma variável extra ao quadro de dados:
Em seguida, criei um novo quadro de dados para manter as coordenadas das linhas diagonais:
A partir daí, adicionei geom_paths ao ggplot acima, com cada um chamando coordenadas diferentes e desenhando as linhas sobre a barra desejada:
Isso resulta no seguinte:
É um pouco desleixado, pois não investi muito tempo em obter as linhas perfeitamente anguladas e espaçadas, mas isso deve servir como uma prova de conceito.
Obviamente, as linhas podem inclinar-se na direção oposta e também há espaço para a malha diagonal, muito parecida com a malha horizontal e vertical.
Acho que isso é tudo que posso oferecer na frente de padrões. Espero que alguém encontre um uso para isso.
EDIT 3: Últimas palavras famosas. Eu vim com outra opção de padrão. Desta vez usando
geom_jitter
.Mais uma vez, adicionei outra variável ao quadro de dados:
E eu pedi como queria que cada padrão fosse apresentado:
Em seguida, criei uma coluna para conter o número associado à barra de destino pretendida no eixo x:
Seguido por colunas para conter as posições no eixo y das 'bolhas':
Finalmente, adicionei
geom_jitter
s ao ggplot acima usando as novas colunas para posicionar e reutilizar 'Pontos' para variar o tamanho das 'bolhas':Cada vez que o gráfico é executado, o jitter posiciona as 'bolhas' de maneira diferente, mas aqui está uma das melhores saídas que tive:
Às vezes, as 'bolhas' tremem fora das fronteiras. Se isso acontecer, execute novamente ou simplesmente exporte em dimensões maiores. Mais bolhas podem ser plotadas em cada incremento no eixo y, o que preencherá mais o espaço em branco, se desejar.
Isso perfaz até 7 padrões (se você incluir linhas diagonais inclinadas opostas e malha diagonal de ambas) que podem ser hackeados no ggplot.
Fique à vontade para sugerir mais se alguém puder pensar em algo.
EDIT 4: Tenho trabalhado em uma função de wrapper para automatizar hachuras / padrões no ggplot2. Vou postar um link depois de expandir a função para permitir padrões em gráficos facet_grid etc. Aqui está uma saída com a entrada da função para um gráfico simples de barras como exemplo:
Vou adicionar uma última edição assim que tiver a função pronta para compartilhar.
EDIT 5: Aqui está um link para a função EggHatch que escrevi para tornar o processo de adição de padrões a plotagens geom_bar um pouco mais fácil.
fonte
Atualmente não é possível porque a grade (o sistema gráfico que ggplot2 usa para fazer o desenho real) não suporta texturas. Desculpe!
fonte
Você pode usar o pacote ggtextures de @claus wilke para desenhar retângulos texturizados e barras com
ggplot2
.Você também pode combiná-lo com outros geoms:
fonte
Eu acho que o trabalho do Docconcoct é ótimo, mas agora eu de repente pesquisei um pacote especial --- Patternplot . Não vi o código interno, mas a vinheta parece útil.
fonte
ggrough
pode ser do seu interesse: https://xvrdm.github.io/ggrough/fonte
Acabei de descobrir um pacote chamado
ggpattern
( https://github.com/coolbutuseless/ggpattern ) que parece ser uma boa solução para esse problema e se integra perfeitamente ao fluxo de trabalho ggplot2. Embora as soluções que usam texturas possam funcionar bem para barras diagonais, elas não produzem gráficos vetoriais e, portanto, não são ideais.Aqui está um exemplo retirado diretamente do repositório github do ggpattern:
que resulta neste gráfico:
Se apenas algumas barras deveriam ser listradas,
geom_col_pattern()
tem umpattern_alpha
argumento que poderia ser usado para tornar certas listras indesejadas completamente transparentes.fonte
Pode ser útil criar um quadro de dados fictício cujos contornos correspondam a "texturas" e, em seguida, usar geom_contour. Aqui está meu exemplo:
E aqui está o resultado: plotagem sombreada com linhas
(as linhas devem ser suavizadas)
fonte