Ga” post=77220Grazie anche a te Claudio. Stavo per rispondere perchè ho risolto almeno uno dei problemi, era una cosa banalissima e cioè quando compilo è necessario fare il passaggio prima da dvi-ps e poi da ps-pdf per questo non riuscivo a visualizzare nulla nel file pdf.
Comunque hai ragione, posto uno dei grafici che vorrei realizzare in modo da essere più chiara. Si trovano nella seconda pagina di questo articolo al seguente link:http://www.ams.org/notices/200909/rtx090901106p.pdf
Spero che qualcuno ne abbia già avuto a che fare (immagino di si :D) e possa darmi qualche utile suggerimento.
Gaia
Credo di avere una soluzione per te. 🙂
Il risultato è questo:
[attachment=421]Immagine_2012-09-05.jpg[/attachment]
Il problema è che è frutto della mia mente malata 😛 quindi non posso dirti se troverai comoda o meno la soluzione. Il codice è questo:
`
\documentclass[svgnames]{article}
\usepackage{tikz}
\usetikzlibrary{calc,backgrounds,positioning}
% Declarations
\pgfmathtruncatemacro\scale{1}
\pgfmathtruncatemacro\minycoord{-5}
\pgfmathtruncatemacro\step{1}
\pgfmathtruncatemacro\maxycoord{5}
\pgfmathtruncatemacro\minxcoord{-5}
\pgfmathtruncatemacro\maxxcoord{5}
\usepackage{xparse}
% Settings
\NewDocumentCommand{\setscale}{m}{\pgfmathtruncatemacro\scale{#1}}
\NewDocumentCommand{\setminycoord}{m}{\pgfmathtruncatemacro\minycoord{#1/\scale}}
\NewDocumentCommand{\setmaxycoord}{m}{\pgfmathtruncatemacro\maxycoord{#1/\scale}}
\NewDocumentCommand{\setmaxxcoord}{m}{\pgfmathtruncatemacro\maxxcoord{#1/\scale}}
\NewDocumentCommand{\setminxcoord}{m}{\pgfmathtruncatemacro\minxcoord{#1/\scale}}
% Specific commands
\NewDocumentCommand{\drawbar}{o m m m}{
\begin{pgfonlayer}{background}
\draw[#1] ($(#2,#3/\scale)+(-\barwidth,0)$)rectangle($(#2,#4/\scale)+(\barwidth,0)$);
\end{pgfonlayer}
}
\NewDocumentCommand{\drawaxes}{}{
\ifnum\minycoord=0
\draw[-stealth,very thick,shorten >=-1cm](0,\minycoord)–(0,\maxycoord);
\else
\draw[stealth-stealth,very thick,shorten <=-1cm,shorten >=-1cm](0,\minycoord)–(0,\maxycoord);
\fi
\ifnum\minycoord=0
\draw[-stealth,very thick,shorten >=-1cm](\minxcoord,0)–(\maxxcoord,0);
\else
\draw[stealth-stealth,very thick,shorten <=-1cm,shorten >=-1cm](\minxcoord,0)–(\maxxcoord,0);
\fi
}
\NewDocumentCommand{\setlabelaxes}{O{0.1}}{
% Y-axis
\pgfmathtruncatemacro\startingy\minycoord
\pgfmathparse{add(\startingy,\step)}\pgfmathresult
\pgfmathtruncatemacro\secondy\pgfmathresult
\pgfmathtruncatemacro\lasty\maxycoord
\foreach \y [evaluate=\y as \scaledy using \y*\scale] in {\startingy,\secondy,…,\lasty}{
\pgfmathtruncatemacro\labely\scaledy
\pgfmathparse{notequal(\labely,0)}\pgfmathresult
\ifnum\pgfmathresult=1
\draw[very thick] (#1,\y)–(-#1,\y) node
{\labely};
\fi
}
% X-axis
\pgfmathtruncatemacro\startingx\minxcoord
\pgfmathparse{add(\startingx,\step)}\pgfmathresult
\pgfmathtruncatemacro\secondx\pgfmathresult
\pgfmathtruncatemacro\lastx\maxxcoord
\foreach \x [evaluate=\x as \scaledx using \x*\scale] in {\startingx,\secondx,…,\lastx}{
\pgfmathtruncatemacro\labelx\scaledx
\pgfmathparse{notequal(\labelx,0)}\pgfmathresult
\ifnum\pgfmathresult=1
\draw[very thick] (\x,#1)–(\x,-#1) node[below] {\labelx};
\fi
}
}
\NewDocumentCommand{\settickaxes}{O{0.1}}{
% Y-axis
\pgfmathtruncatemacro\startingy\minycoord
\pgfmathparse{add(\startingy,\step)}\pgfmathresult
\pgfmathtruncatemacro\secondy\pgfmathresult
\pgfmathtruncatemacro\lasty\maxycoord
\foreach \y[evaluate=\y as \scaledy using \y*\scale] in {\startingy,\secondy,…,\lasty}{
\pgfmathtruncatemacro\labely\scaledy
\pgfmathparse{notequal(\labely,0)}\pgfmathresult
\ifnum\pgfmathresult=1
\draw[very thick] (#1,\y)–(-#1,\y);
\fi
}
% X-axis
\pgfmathtruncatemacro\startingx\minxcoord
\pgfmathparse{add(\startingx,\step)}\pgfmathresult
\pgfmathtruncatemacro\secondx\pgfmathresult
\pgfmathtruncatemacro\lastx\maxxcoord
\foreach \x [evaluate=\x as \scaledx using \x*\scale] in {\startingx,\secondx,…,\lastx}{
\pgfmathtruncatemacro\labelx\scaledx
\pgfmathparse{notequal(\labelx,0)}\pgfmathresult
\ifnum\pgfmathresult=1
\draw[very thick] (\x,#1)–(\x,-#1);
\fi
}
}
\NewDocumentCommand{\drawpoints}{O{0.1} m}{
\foreach \place/\name/\color in {#2}
\draw[draw=none,fill= \color] \place circle[radius=#1] node(\name) {};
}
\NewDocumentCommand{\drawpins}{O{cyan} m}{
\foreach \place/\name/\position in {#2}
\draw[draw=#1, shorten <=0.45cm] \place -- (\name.\position);
}
\begin{document}
\begin{tikzpicture}
\setscale{1}
\setminycoord{0}
\setmaxycoord{4}
\setminxcoord{0}
\setmaxxcoord{4}
% Axes
\drawaxes
\settickaxes[0.075]
\drawpoints[0.15]{{(2,1)/a/red},{(3,1)/b/blue},{(4,1)/c/blue},{(1,2)/d/magenta},{(2,2)/e/orange}}
\drawpins[cyan]{{(2,1)/a/north},{(3,1)/b/east},{(4,1)/c/east}}
\end{tikzpicture}
\vspace{2cm}
\begin{tikzpicture}
\setscale{1}
\setminycoord{0}
\setmaxycoord{4}
\setminxcoord{0}
\setmaxxcoord{4}
% Axes
\drawaxes
\setlabelaxes[0.075]
\drawpoints[0.15]{{(2,1)/a/red},{(3,1)/b/blue},{(4,1)/c/blue},{(1,2)/d/magenta},{(2,2)/e/orange}}
\drawpins[cyan]{{(2,1)/a/north},{(3,1)/b/east},{(4,1)/c/east}}
\end{tikzpicture}
\end{document}
`
Considera che prima di [tt]\begin{document}[/tt] è tutta fuffa utile solo ad impostare i comandi, ti illustro brevemente il funzionamento di ciò che serve per il disegno.
Con i vari \set si impostano le dimensioni degli assi e lo step di incremento. Il comando \drawaxes non fa altro che disegnare i segmenti degli assi, ma è solo con \settickaxes o \setlabelaxes che gli assi vengono suddivisi o suddivisi con label. Puoi personalizzare solo la lunghezza del tick nel comando opzionale fra [].
Infine, i comandi principali (occhio alla sintassi). \drawpoints serve per disegnare i cerchi; la sintassi di un singolo elemento è: [tt]coordinata/nome del punto/colore[/tt] e la coordinata deve essere data fra parentesi tonde. Ogni elemento deve essere inserito fra parentesi graffe. Molto simile è \drawpins che serve per inserire i segmenti nei nodi; la sintassi di un elemento è: [tt]coordinata/nome del punto/posizione[/tt] dove [tt]posizione[/tt] può essere [tt]north,south,west,east[/tt]. Ogni nome va associato ad una coordinata per poter disegnare il segmento nel posto giusto: ho cercato di farne a meno, ma questa è la soluzione più facile e rapida.
Ciao
Claudio