Avatar billede loevgaard Novice
15. september 2012 - 19:07 Der er 9 kommentarer og
1 løsning

MATLAB og LaTeX

Hej igen!

Jeg har fået nys om et plugin/script til MATLAB, der hedder matlab2tikz.

Altså det den gør, er som navnet halvt antyder: at lave bl.a. plots om til LaTeX-filer i form af TikZ environment.

Det fungerer såvidt også fint nok når jeg gør det. Problemet er bare, at outputtet viser noget andet end inputtet :S Kort sagt, den viser årstal  ved f.eks. 2,007 når der skal stå 2007. Jeg aner ikke hvad der går galt og af en eller anden grund tror jeg ikke det er MATLAB's fejl. Men hvad filen ved jeg?

Scriptet genererer følgende kode ud fra matlab-plottet:
\documentclass[11pt,a4paper,twoside,openany]{article}
\usepackage[utf8]{inputenc}
\usepackage[danish]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{fourier}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\usepackage{tikz,pgfplots}    \usetikzlibrary{arrows,decorations.pathmorphing,backgrounds,positioning,fit,petri,patterns}
\newlength\figureheight
\newlength\figurewidth
\setlength\figureheight{4cm}
\setlength\figurewidth{0.6\textwidth}
\begin{document}

%Det er denne kode der bliver genereret:
\begin{tikzpicture}

\begin{axis}[%
view={0}{90},
width=\figurewidth,
height=\figureheight,
scale only axis,
xmin=2005.5, xmax=2012.5,
xlabel={År},
ymin=2800, ymax=4600,
ylabel={Antal indbyggere},
legend style={at={(0.03,0.97)},anchor=north west,align=left}]
\addplot [
color=blue,
solid,
mark=*,
mark options={solid}
]
coordinates{
(2006,3709)(2007,3730)(2008,3817)(2009,3868)(2010,4075)(2011,4182)(2012,4413)
};
\addlegendentry{Klarup};

\addplot [
color=green,
dashed,
mark=*,
mark options={solid}
]
coordinates{
(2006,2950)(2007,2961)(2008,3123)(2009,3170)(2010,3274)(2011,3243)(2012,3282)
};
\addlegendentry{Storvorde};

\end{axis}
\end{tikzpicture}%
\end{document}

Mit eksempel kommer til at se således ud:
https://dl.dropbox.com/u/5941292/test.pdf

Og som I kan se, er der komma i alle tal, som om den skal gøre det for hver 10^3...
Avatar billede loevgaard Novice
15. september 2012 - 19:09 #1
Bør måske lige tilføje, at i MATLAB bliver flg. kode brugt i editor:

figure;
storvorde=[2950 2961 3123 3170 3274 3243 3282];
klarup=[3709 3730 3817 3868 4075 4182 4413];
aar=[2006 2007 2008 2009 2010 2011 2012];
%hold all;
plot(aar,klarup,'b . -',aar,storvorde,'g . --');
legend('Klarup','Storvorde','Location','Northwest');
xlabel('År');
ylabel('Antal indbyggere');

matlab2tikz('indbyggere.tex','height','\figureheight','width','\figurewidth','encoding','utf8')
Avatar billede aliaz Nybegynder
15. september 2012 - 19:21 #2
Hvad er der nu galt med at trække PDF ud af MATLAB og inputte dem i LaTeX? :)
Avatar billede loevgaard Novice
15. september 2012 - 22:15 #3
Jeg føler mig bare så smart, når jeg kan gøre det avanceret :P

Har også tænkt på det, men jeg kan nu godt li' de TikZ-billeder, for så har man også mulighed for at ændre et tal senere i stedet for at gå ind i MATLAB igen :)
Avatar billede aliaz Nybegynder
16. september 2012 - 11:09 #4
Skal jeg forstå det sådan, at du har MATLAB-koden inde i din LaTeX-editor? I dit viste eksempel er det vældig simpelt, men kræver din figur nu 1000+ linjers kode i MATLAB, slipper du jo næppe for at skulle derind igen.
Avatar billede loevgaard Novice
16. september 2012 - 11:18 #5
Nej MATLAB for sig og LaTeX for sig...

MATLAB koden matlab2tikz('indbyggere',OPTIONS) inde i selve programmet, genererer en .tex-fil med koden baseret på plottet:
\begin{tikzpicture}

\begin{axis}[%
view={0}{90},
width=\figurewidth,
height=\figureheight,
scale only axis,
xmin=2005.5, xmax=2012.5,
xlabel={År},
ymin=2800, ymax=4600,
ylabel={Antal indbyggere},
legend style={at={(0.03,0.97)},anchor=north west,align=left}]
\addplot [
color=blue,
solid,
mark=*,
mark options={solid}
]
coordinates{
(2006,3709)(2007,3730)(2008,3817)(2009,3868)(2010,4075)(2011,4182)(2012,4413)
};
\addlegendentry{Klarup};

\addplot [
color=green,
dashed,
mark=*,
mark options={solid}
]
coordinates{
(2006,2950)(2007,2961)(2008,3123)(2009,3170)(2010,3274)(2011,3243)(2012,3282)
};
\addlegendentry{Storvorde};

\end{axis}
\end{tikzpicture}%

Det var bare for at lave et eksempel til jer, således I kunne sætte det ind og "køre" latex, for så at se om I får 2,007 eller 2007.
Avatar billede aliaz Nybegynder
16. september 2012 - 11:19 #6
Nevermind. Kan jo selvfølgelig se længere oppe i dit eksempel, at selvom figuren kræver mange linjers kode, bliver selve tikzpicture environmentet ikke nødvendigvis kæmpe stort.

On topic: Kan det være noget med en sprogindstilling, der gør at den indsætter tusindtalsseparator (engelsk) som også SIunitx gør, som du skal have justeret til dansk?
Avatar billede aliaz Nybegynder
16. september 2012 - 11:22 #7
Avatar billede loevgaard Novice
16. september 2012 - 14:36 #8
Tak for det... hmm...
Googlede du bare på... hvad? Synes jeg havde lavet talrige af søgninger uden resultat.
Avatar billede aliaz Nybegynder
16. september 2012 - 14:50 #9
Google translate mener at "tusindstalsseparator" hedder "thousands", så jeg googlede bare "tikzpicture thousands".
Avatar billede aliaz Nybegynder
16. september 2012 - 15:16 #10
Tak for point!

Lukker du ikke lige dette spørgsmål også? http://www.eksperten.dk/spm/962815
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester