Pessoas tão talentosas não descobri como fazer xkcd gráficos estilo em Mathematica , em LaTeX , em Python e em R já.
Como alguém pode usar o MATLAB para produzir um gráfico parecido com o descrito acima?
O que eu tentei
Criei linhas onduladas, mas não consegui eixos magros. A única solução que pensei foi substituí-los por linhas onduladas, mas quero poder mudar os eixos reais. Também não consegui que a fonte Humor funcionasse, o bit de código usado era:
annotation('textbox',[left+left/8 top+0.65*top 0.05525 0.065],...
'String',{'EMBARRASSMENT'},...
'FontSize',24,...
'FontName','Humor',...
'FitBoxToText','off',...
'LineStyle','none');
Para a linha ondulada, experimentei adicionar um pequeno ruído aleatório e suavizar:
smooth(0.05*randn(size(x)),10)
Mas eu não conseguia fazer o fundo branco aparecer ao redor deles quando eles se cruzam ...
Respostas:
Vejo duas maneiras de resolver isso: A primeira maneira é adicionar um jitter às coordenadas x / y dos recursos da plotagem. Isso tem a vantagem de que você pode modificar facilmente um gráfico, mas precisa desenhar os eixos se quiser txkcdyfied (consulte a solução do @Rody Oldenhuis ). A segunda maneira é criar um gráfico não instável e usar
imtransform
para aplicar uma distorção aleatória na imagem. Isso tem a vantagem de poder ser usado com qualquer plotagem, mas você terá uma imagem, não uma plotagem editável.Vou mostrar o número 2 primeiro e minha tentativa de número 1 abaixo (se você preferir o número 1, veja a solução de Rody !).
Esta solução conta com duas funções principais: EXPORT_FIG da troca de arquivos para obter uma captura de tela sem serrilhado e IMTRANSFORM para obter uma transformação.
Aqui está minha tentativa inicial de tremer
fonte
Em vez de reimplementar todas as várias funções de plotagem, eu queria criar uma ferramenta genérica que pudesse converter qualquer plotagem existente em uma plotagem no estilo xkcd.
Essa abordagem significa que você pode criar plotagens e estilizá-las usando as funções padrão do MATLAB e, quando terminar, poderá renderizar novamente a plotagem no estilo xkcd, preservando o estilo geral da plotagem.
Exemplos
Enredo
Bar & Plot
Box & Plot
Como funciona
A função funciona iterando sobre os filhos de um eixo. Se as crianças são do tipo
line
ou aspatch
distorcem levemente. Se o filho for do tipo,hggroup
ele itera nos sub filhos dohggroup
. Tenho planos de oferecer suporte a outros tipos de plotagem, comoimage
, mas não está claro qual é a melhor maneira de distorcer a imagem para ter um estilo xkcd.Finalmente, para garantir que as distorções pareçam uniformes (ou seja, as linhas curtas não são distorcidas mais que as longas), eu medo o comprimento da linha em pixels e depois faço uma amostra proporcional ao seu comprimento. Adiciono ruído a cada enésima amostra que produz linhas que apresentam mais ou menos a mesma quantidade de distorção.
O código
Em vez de colar várias centenas de linhas de código, irei apenas vincular a uma essência da fonte . Além disso, o código fonte e o código para gerar os exemplos acima estão disponíveis gratuitamente no GitHub .
Como você pode ver nos exemplos, ele ainda não distorce os eixos, embora eu planeje implementar assim que descobrir a melhor maneira de fazer isso.
fonte
export_fig
rota, ou seja, ele primeiro formata o gráfico como xkcd e depois distorce a imagem.O primeiro passo ... encontre uma fonte do sistema que você gosta (use a função
listfonts
para ver o que está disponível) ou instale uma que corresponda ao estilo de escrita à mão do xkcd . Encontrei uma fonte TrueType "Humor Sans" do usuário ch00f mencionada nesta postagem do blog e a utilizarei nos meus exemplos subseqüentes.A meu ver, geralmente você precisará de três objetos gráficos modificados diferentes para criar esse tipo de gráfico: um objeto de eixos , um objeto de linha e um objeto de texto . Você também pode querer que um objeto de anotação facilite as coisas, mas prevejo isso por enquanto, pois pode ser mais difícil de implementar do que os três objetos acima.
Criei funções de wrapper que criaram os três objetos, substituindo determinadas configurações de propriedade para torná-las mais parecidas com xkcd. Uma limitação é que os novos gráficos que eles produzem não serão atualizados em certos casos (como caixas delimitadoras em objetos de texto ao redimensionar os eixos), mas isso pode ser explicado por uma implementação orientada a objetos mais completa que envolve a herança do identificador classe , usando eventos e ouvintes , etc. Por enquanto, aqui estão minhas implementações mais simples:
xkcd_axes.m:
xkcd_text.m:
xkcd_line.m:
E aqui está um exemplo de script que os utiliza para recriar os quadrinhos acima. Recriei as linhas usando
ginput
para marcar pontos no gráfico com o mouse, capturando-os e plotando-os como eu queria:E (trombetas) aqui está o gráfico resultante !:
fonte
OK, então, aqui está a minha tentativa menos grosseira, mas ainda não muito clara:
Resultado:
Coisas para fazer:
plot2xkcd
para que possamos converter qualquer plot / figura no estilo xkcd.fonte