xkcd komik tarzı MATLAB'DA grafikler
Yetenekli insanlar xkcd stilin Mathematica, in LaTeX, in Python ve in R grafikler nasıl çoktan çözmüş.
Nasıl bir kullanımı yukarıdaki gibi görünen bir arsa üretmek için MATLAB?
Denedim
Dalgalı çizgiler yarattım, ama wiggly balta bulamadım. Aklıma tek çözüm kıvrımlı hatları ile bunların üzerine, ama gerçek eksen değiştirmek mümkün olmak istiyorum. Ben de Mizah yazı çalışmak için alamadım, kod bit kullanıldı:
annotation('textbox',[left left/8 top 0.65*top 0.05525 0.065],...
'String',{'EMBARRASSMENT'},...
'FontSize',24,...
'FontName','Humor',...
'FitBoxToText','off',...
'LineStyle','none');
Kıvrımlı çizgi, küçük rasgele bir Gürültü Ekleme ve düzeltme ile tecrübe:
smooth(0.05*randn(size(x)),10)
Ama kesişen etrafında görünür beyaz arka plan yapamadım...
CEVAP
Bunu çözmek için iki yol görüyorum: ilk yolu arsa özellikleri x/y koordinatları için biraz titreme eklemektir. Bu kolayca bir arsa değiştirebilirsiniz avantajı vardır, ama eğer onları xkcdyfied (@Rody Oldenhuis' solution) sahip olmak istiyorsanız eksen kendiniz çizmek Zorundasınız. İkinci yolu olmayan gergin bir arsa oluşturmak ve imtransform
görüntüye rastgele bir bozulma uygulamak için kullanmaktır. Bu bir komplo ile kullanabilirsiniz avantajı vardır, ama bir resim, düzenlenebilir bir Arsa ile sona erecek.
#2 ilk göstereceğim, ve #1 Aşağıda (#1 Daha çok hoşuna gidiyorsa, Rody's solution! bak) benim girişimi.
Bu çözüm, iki temel fonksiyona dayanır: yumuşatılmış ekran, IMTRANSFORM bir dönüşüm almak için dosya değişimi EXPORT_FIG.
%# define plot data
x = 1:0.1:10;
y1 = sin(x).*exp(-x/3) 3;
y2 = 3*exp(-(x-7).^2/2) 1;
%# plot
fh = figure('color','w');
hold on
plot(x,y1,'b','lineWidth',3);
plot(x,y2,'w','lineWidth',7);
plot(x,y2,'r','lineWidth',3);
xlim([0.95 10])
ylim([0 5])
set(gca,'fontName','Comic Sans MS','fontSize',18,'lineWidth',3,'box','off')
%# add an annotation
annotation(fh,'textarrow',[0.4 0.55],[0.8 0.65],...
'string',sprintf('text%shere',char(10)),'headStyle','none','lineWidth',1.5,...
'fontName','Comic Sans MS','fontSize',14,'verticalAlignment','middle','horizontalAlignment','left')
%# capture with export_fig
im = export_fig('-nocrop',fh);
%# add a bit of border to avoid black edges
im = padarray(im,[15 15 0],255);
%# make distortion grid
sfc = size(im);
[yy,xx]=ndgrid(1:7:sfc(1),1:7:sfc(2));
pts = [xx(:),yy(:)];
tf = cp2tform(pts randn(size(pts)),pts,'lwm',12);
w = warning;
warning off images:inv_lwm:cannotEvaluateTransfAtSomeOutputLocations
imt = imtransform(im,tf);
warning(w)
%# remove padding
imt = imt(16:end-15,16:end-15,:);
figure('color','w')
imshow(imt)
İşte jittering ilk denemem
%# define plot data
x = 1:0.1:10;
y1 = sin(x).*exp(-x/3) 3;
y2 = 3*exp(-(x-7).^2/2) 1;
%# jitter
x = x randn(size(x))*0.01;
y1 = y1 randn(size(x))*0.01;
y2 = y2 randn(size(x))*0.01;
%# plot
figure('color','w')
hold on
plot(x,y1,'b','lineWidth',3);
plot(x,y2,'w','lineWidth',7);
plot(x,y2,'r','lineWidth',3);
xlim([0.95 10])
ylim([0 5])
set(gca,'fontName','Comic Sans MS','fontSize',18,'lineWidth',3,'box','off')