SORU
3 EKİM 2012, ÇARŞAMBA


xkcd komik tarzı MATLAB'DA grafikler

xkcd-style graph

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
3 EKİM 2012, ÇARŞAMBA


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.

enter image description here

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

enter image description here

%# 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')

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • gamingbits

    gamingbits

    2 Mayıs 2006
  • Matt Steffanina

    Matt Steffan

    1 EYLÜL 2011
  • pjtoohot

    pjtoohot

    15 NİSAN 2008

İLGİLİ SORU / CEVAPLAR