Risposte nei forum create
-
AutoreRisposte
-
13 Settembre 2012 alle 8:53 in risposta a: [Risolto] “Marcatura” dei grafici a barre con pgfplots #78437::
Non ti scoraggiare! Ti allego anche un esempio di automazione che può essere migliorato. In particolare, i colori vanno inseriti manualmente (non ho capito come recuperarli automaticamente dalla lista di pgfplots). Se usi la mappa dei colori predefinita, l’ordine lo trovi sul manuale nel codice all’inizio di pag. 144. Inoltre non riesco ad usare alcuni caratteri speciali come etichette (ad esempio §). Qui qualcun altro ci potrà aiutare 😉Ricordati di aggiornare il valore di n in [tt]\def\n{3}[/tt] se cambi il numero di barre.
`\documentclass{standalone}\usepackage{pgfplots}
\usetikzlibrary{calc}
\pgfplotsset{/pgf/number format/use comma, compat=newest}
\usepackage{siunitx}\begin{document}
\begin{tikzpicture}
\def\x{1}
\def\n{3}
\def\w{24pt}
\def\d{2pt}\begin{axis}[ymin=0, ymax=10, bar width=\w, ybar=\d, xtick={\x}, xticklabel={NUCLEO}, xtick pos=left,
ymajorgrids=true, minor y tick num=3, ylabel={Area (\si{\square\micro\meter})},
legend style={at={(0.5,-0.12)}, anchor=north,legend columns=-1}]\foreach [count=\i] \y/\e/\tx/\colore in {7.17/0.26/\%/blue, 7.5/0.36/\#/red, 4/1/a/brown!60!black}
{
\addplot+ [error bars/.cd, y dir=both, y explicit]
coordinates {(\x,\y) +- (\e,\e)};
\pgfmathparse{\y+\e}
\let\z\pgfmathresult
\edef\temp
{\noexpand\draw ($(axis cs:\x,\z) + {\i-0.5*\n-0.5}*(\w+\d,0)$) node [\colore, anchor=south] {\tx};}
\temp
}
\legend{CTRL, BTZ, booh?}
\end{axis}
\end{tikzpicture}
\end{document}`
CiaoP.S: Ho dimenticato di dirti che ogni elemento separato da virgola del foreach dichiara una ordinata/relativo errore/relativa etichetta/relativo colore.
12 Settembre 2012 alle 15:29 in risposta a: [Risolto] “Marcatura” dei grafici a barre con pgfplots #78435::
Seguendo la strada delle annotazioni personalizzate, potresti fare una cosa del genere:
`\documentclass{standalone}\usepackage{pgfplots}
\usetikzlibrary{calc}
\pgfplotsset{/pgf/number format/use comma, compat=newest}
\usepackage{siunitx}\begin{document}
\begin{tikzpicture}
\begin{axis}[
%enlarge x limits=0.40,
legend style={at={(0.5,-0.12)}, anchor=north,legend columns=-1},
%width=0.75\textwidth,
bar width=24pt,
ybar,
ymin=0, ymax=10,
minor y tick num=3,
ymajorgrids=true,
ylabel={Area (\si{\square\micro\meter})},
xtick pos=left,
xtick={1}, xticklabel={NUCLEO},
]\addplot+ [error bars/.cd, y dir=both, y explicit]
coordinates{(1, 7.17) +- (0.26, 0.26)};
\draw ($(axis cs:1,7.43) + (-13pt,0)$) node [blue, anchor=south] {\S};\addplot+ [error bars/.cd, y dir=both, y explicit]
coordinates{(1, 7.5) +- (0.36, 0.36)};
\draw ($(axis cs:1,7.86) + (13pt,0)$) node [red, anchor=south] {\#};\legend{CTRL, BTZ}
\end{axis}
\end{tikzpicture}
\end{document}`
[tt]13pt[/tt] sono la somma di mezza larghezza delle barre (24 pt) + mezzo bar shift (2 pt). Nota come ho dovuto trattare la tacchetta sull’asse orizzontale diversamente da te.
Indicati con \(x\) l’ascissa comune alle barre, con \(w\) la larghezza delle barre, con \(d\) lo scostamento tra barre adiacenti, con \(n\) il numero di barre con la stessa tacca e con \(i\) la i-esima barra a partire dalla più a sinistra, la formula generale per trovare l’ascissa delle etichette è
\[x-\frac{n-1}{2}(w+d)+(i-1)(w+d)=x+\left(i-\frac{n+1}{2}\right)(w+d)\;,\quad i=1,\ldots,n\]
Il secondo addendo corrisponde a [tt]-13pt[/tt] e [tt]13pt[/tt] nel mio codice.Ciao
::
Visto che in questa conversazione non se n’è parlato, ho letto sul manuale che per ottenere le formule in linea bisogna usare la notazione backslash+parentesi tonda anziché la più diffusa [tt]$…$[/tt]. Prova: \(f(x)<0\). A meno che non si attivi (credo a livello di amministrazione) la notazione con l’asterisco.`Visto che in questa conversazione non se n'è parlato, ho letto sul manuale che per ottenere le formule in linea
bisogna usare la notazione backslash+parentesi tonda anziché la più diffusa [tt]$…$[/tt]. Prova: \(f(x)<0\).
A meno che non si attivi (credo a livello di amministrazione) la notazione con l'asterisco.`
10 Settembre 2012 alle 11:00 in risposta a: Comando per scrivere i pedici delle formule matematiche #78268::Sostenitore Apple” post=77376Ad esempio il calore specifico a pressione costante è da scriversi come $c_p$ oppure come $c_\mathrm{p}$ e ancora la portata in massa come $dot{m}_a$ o come $dot{m}_\mathrm{a}$?
La Norma ISO 80000-5, arg. 5-16.2 prescrive che la p sia in corsivo. Questo perché nella norma ISO 80000-1, par. 7.1.2 (Subscripts) si legge (riassumo per motivi di diritti) che ogni pedice che rappresenti una grandezza fisica o una variabile matematica deve essere scritto in corsivo, mentre quelli rappresentanti parole o costanti vanno scritti in tondo.
Quindi p, prima di essere l’abbreviazione di pressione è il simbolo della grandezza pressione e va scritto in corsivo.La norma ISO 80000-4, arg. 4-29 prescrive che il simbolo per la portata massica sia \(q_m\).
::OldClaudio” post=77347Se uno volesse i resistori con 4 cuspidi, invece che con 3, per esempio, non ho idea se sia fattibile.
E’ fattibile, ma non c’è un’opzione a livello utente: bisogna mettere mano al codice del pacchetto e quindi non è tanto immediato.
Esempio di codice:
`\documentclass{standalone}
\usepackage{circuitikz}\makeatletter
\ctikzset{bipoles/mioresistor/width/.initial=1.0664}%% Resistore a quattro cuspidi (mioresistor o mioR)
\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/resistor/height}}{mioresistor}{\ctikzvalof{bipoles/resistor/height}}
{\ctikzvalof{bipoles/mioresistor/width}}{
\pgf@circ@Rlen=1.333\pgf@circ@Rlen
\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
\divide \pgf@circ@res@step by 16\pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
\pgf@circ@res@other = \pgf@circ@res@left
\advance\pgf@circ@res@other by \pgf@circ@res@step\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
\advance\pgf@circ@res@other by 2\pgf@circ@res@step
\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
\advance\pgf@circ@res@other by 2\pgf@circ@res@step
\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
\advance\pgf@circ@res@other by 2\pgf@circ@res@step
\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
\advance\pgf@circ@res@other by 2\pgf@circ@res@step
\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
\advance\pgf@circ@res@other by 2\pgf@circ@res@step
\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
\advance\pgf@circ@res@other by 2\pgf@circ@res@step
\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
\advance\pgf@circ@res@other by 2\pgf@circ@res@step
\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
\advance\pgf@circ@res@other by \pgf@circ@res@step
\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
\pgfusepath{draw}
}\def\pgf@circ@mioresistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{generic}{#1}
\else\pgf@circ@bipole@path{mioresistor}{#1}\fi}\tikzset{mioresistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@mioresistor@path, l=#1}}
\tikzset{mioR/.style= {mioresistor = #1}}
\makeatother\begin{document}
\begin{circuitikz}
\draw (0,0) to [R=$R_3$] (2,0);
\draw (0,-2) to [mioR=$R_4$] (2,-2);
\end{circuitikz}
\end{document}`[attachment=491]prova2.png[/attachment]
Sono d’accordo con te per il discorso sull’inclinazione delle serpentine. Tra l’altro, nelle ultime norme ISO (ma non nelle ANSI IEEE), il simbolo citato è cancellato e sostituito dalla più anonima scatola nera, che io ho sempre usato per indicare un generico bipolo passivo e trovo poco chiaro (ma vedo che ormai è abbondantemente adottato).
Ciao
Attachments:
You must be logged in to view attached files.::
Claudio intende questo:[attachment=431]vdd.png[/attachment]
che si può realizzare con questo codice, in sostituzione di ciò che ciò che c’è subito prima di [tt] let \p{opamp.up}=(opamp.up) in [/tt]:
` (opamp.out) node[npn, anchor=B] (npn) {};
\draw [-latex] (opamp.down) |- ++ (0.4,0.5);
\draw (opamp.down) ++ (0.3,0.5) node{$V_\mathrm{DD}$}`
@OldClaudio, quel disegno non è realizzato con circuitikz: è il prototipo di ciò che Andrea vuole realizzare (è scritto in fondo al messaggio). In circuitikz i resistori hanno 3 creste, anche se l’inclinazione non rispetta né le norme ANSI IEEE, né le vecchie CEI.Ciao
Attachments:
You must be logged in to view attached files.::cfiandra” post=77249Quello che mi chiedevo io è se includendo la nuova libreria con [tt]\usetikzlibrary{hobby}[/tt] automaticamente [tt]pgfplots[/tt] la riconosca e utilizzi il nuovo l’algoritmo.
Finalmente ho potuto provare il pacchetto, dopo averne letto la documentazione (esclusa la descrizione dell’algoritmo). Il miglioramento rispetto all’algoritmo nativo di TikZ è notevole, ma chi l’ha realizzato non ha pensato di sostituire l’opzione [tt]smooth[/tt], ma semplicemente di creare una nuova opzione per [tt]draw[/tt]. In questo modo né il [tt]\draw plot[/tt] di TikZ, né l'[tt]\addplot[/tt] di pgfplots sono in grado al momento di beneficiare del nuovo algoritmo.
Tra l’altro mi chiedo perché l’autore abbia realizzato un nuovo pacchetto e non abbia cercato invece di integrare direttamente l’algoritmo in TikZ come libreria, richiedendo la collaborazione degli autori di quest’ultimo. In tal caso, forse la compatibilità sarebbe stata garantita dal principio.
Resto fiducioso che in futuro l’algoritmo di smooth verrà modificato.
::
`(opamp.down) ++ (-0.4,0.5) — ++ (0.8,0)`
A me sembra che il codice che hai inserito prima andasse già bene così (non corrisponde all’immagine). Riguardo all’immagine vorrei aggiungere a quanto detto Claudio che
1) le creste del resistore devono essere dispari (per un semplice resistore ne vanno bene 3)
2) non ha senso la notazione con il riferimento all’alimentazione se non c’è anche un riferimento al nodo di massa
3) non ha senso un circuito con un solo morsetto di uscita (il pallino vuoto corrisponde ad un morsetto).Ciao
6 Settembre 2012 alle 11:47 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72822::
Grazie mille OldClaudio, intervento interessantissimo come sempre. Purtroppo il mio velocissimo MiKTeX non rende ancora disponibile il pacchetto, perciò aspetterò ancora un po’ per fare le mie prove. Nel frattempo ho scaricato il manuale da CTAN e gli darà una bella occhiata.
Per @cfiandra, a suo tempo mi era sembrato di capire che l’algoritmo di pgfplots per lo smooth sia lo stesso di Ti[k]Z, perciò risolto un problema, si risolve automaticamente l’altro.Nel frattempo segnalo che nella nuova versione di pgfplots sembrano risolti i problemi di deformazione lamentati nei grafici tridimensionali (sfera e cubo) quando è attiva l’opzione [tt]axis equal[/tt] o equivalente.
Ciao
::Iovem” post=77186lo stile applicato a [tt]\fill[/tt] lo hai creato tu? Hai tratto ispirazione da qualcosa in particolare? Sapresti consigliarmi un effetto simile (anche senza le ombre, bastano le sfumature) da applicare ad altri colori (es: rosso,verde,arancio) in modo da dare lo stesso aspetto ad istogrammi con più serie di dati?
Lo stile l’ho realizzato cercando di riprodurre l’immagine di excel che hai inserito all’inizio della conversazione (che ora è cambiata), come da tua richiesta. Guardando il risultato sul grafico completo, forse le ombre sono un po’ troppo lunghe. Per le sfumature di colore, ho semplicemente scelto due tonalità di azzurro dal manuale di xcolor nel paragrafo 4.3 a pag. 38. Se vuoi provare altri colori, devi solo sostituire gli originali in [tt]top color[/tt] e [tt]bottom color[/tt] nelle riga di tikzstyle.
Per esempio, sul rosso potresti provare [tt]FireBrick!70[/tt] (un po’ più chiaro di FireBrick) + [tt]DarkRed[/tt]; però così le ombre grigie non stanno benissimo, allora sostituisci il black dopo il fill con [tt]DarkRed!80!Black[/tt] (un po’ più rosso che nero).
Con il rosa prova [tt]LightSalmon[/tt] + [tt]DarkSalmon!70!DarkRed[/tt].
Con il verde: [tt]YellowGreen!70!SeaGreen[/tt] + [tt]ForestGreen[/tt] e per l’ombra [tt]ForestGreen!80!Black[/tt].
Insomma: fa un po’ di tentativi. Dipende molto dal gusto personale.Ciao
::
Problema risolto. La spiegazione è a pag. 359 (par. 8.1) del manuale di pgfplots, nel capoverso che inizia con keep in mind.
Ti allego il codice realizzato con datatool e quello realizzato con pgfplotstable, come suggerito da Claudio. Scegli tu la soluzione che ti piace di più.
Fammi sapere se ci sono altri problemi.
`\documentclass{article}
\usepackage{datatool}
\usepackage[svgnames]{xcolor}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}
\usetikzlibrary{shadings,shadows,fadings,calc}\DTLloaddb[noheader=false]{misure}{dati.dat}
\begin{document}
\begin{tikzpicture}
\tikzfading [name=dissolvenza, top color=transparent!0, bottom color=transparent!95]
\tikzstyle{ripieno}=[top color=DodgerBlue, bottom color=RoyalBlue, general shadow={fill=black, shadow yshift=-0.8ex, path fading=dissolvenza}]
\def\h{0.3} % semialtezza del rettangolo\begin{axis} [xmin=2009-03-28, xmax=2012-07-10, y dir=reverse, xmajorgrids=true,
date coordinates in=x, date ZERO=2009-03-28,
xtick={2009-03-28,2009-10-14,2010-05-02,2010-11-18,2011-06-06,2011-12-23,2012-07-10},
xticklabel={\day-\month-\year}, x tick label style={rotate=45,anchor=east},
ytick={1,2,3,4}, ylabel=Misure]\DTLforeach*{misure}%
{\skip=i,\inizio=inizio,\fine=fine}%
{\edef\temp{
\noexpand
\fill [ripieno] (axis cs:\inizio,\skip) ++ (axis direction cs:2009-03-28,-\h)
rectangle ($(axis cs:\fine,\skip) + (axis direction cs:2009-03-28,\h)$);}
\temp}\addplot [draw=none] coordinates {(2009-03-28,0.7) (2012-07-10,4.3)};
\end{axis}
\end{tikzpicture}
\end{document}`
`\documentclass{article}
\usepackage[svgnames]{xcolor}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}
\usetikzlibrary{shadings,shadows,fadings,calc}\pgfplotstableread{dati.dat}{\misure}
\pgfplotstablegetrowsof{\misure}
\pgfmathsetmacro{\righe}{\pgfplotsretval-1}\begin{document}
\begin{tikzpicture}
\tikzfading [name=dissolvenza, top color=transparent!0, bottom color=transparent!95]
\tikzstyle{ripieno}=[top color=DodgerBlue, bottom color=RoyalBlue, general shadow={fill=black, shadow yshift=-0.8ex, path fading=dissolvenza}]
\def\h{0.3} % semialtezza del rettangolo\begin{axis} [xmin=2009-03-28, xmax=2012-07-10, y dir=reverse, xmajorgrids=true,
date coordinates in=x, date ZERO=2009-03-28,
xtick={2009-03-28,2009-10-14,2010-05-02,2010-11-18,2011-06-06,2011-12-23,2012-07-10},
xticklabel={\day-\month-\year}, x tick label style={rotate=45,anchor=east},
ytick={1,2,3,4}, ylabel=Misure]\foreach \i in {0,…,\righe}
{
\pgfplotstablegetelem{\i}{i}\of\misure
\let\skip\pgfplotsretval
\pgfplotstablegetelem{\i}{inizio}\of\misure
\let\inizio\pgfplotsretval
\pgfplotstablegetelem{\i}{fine}\of\misure
\let\fine\pgfplotsretval
\edef\temp{
\noexpand
\fill [ripieno] (axis cs:\inizio,\skip) ++ (axis direction cs:2009-03-28,-\h)
rectangle ($(axis cs:\fine,\skip) + (axis direction cs:2009-03-28,\h)$);}
\temp
}\addplot [draw=none] coordinates {(2009-03-28,0.7) (2012-07-10,4.3)};
\end{axis}
\end{tikzpicture}
\end{document}`
::
Ora devo sospendere. Nel frattempo ti mostro il codice con i vertici del rettangolo calcolati automaticamente. Il file dati.dat è quello con la colonna i soltanto. Noterai che la semialtezza del rettangolo è stata definita a parte in modo da poterla modificare rapidamente in un secondo tempo. La riga con \DTLcurrentindex serve solo per mostrare che in realtà il ciclo stampa 4 volte la stessa istruzione con \skip=4. E’ stato necessario impostare lo zero (28/3/2009) in modo da poter utilizzare gli spostamenti relativi.`\documentclass{article}
\usepackage{datatool}
\usepackage[svgnames]{xcolor}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}
\usetikzlibrary{shadings,shadows,fadings,calc}
%\pgfplotsset{compat=1.6}\DTLloaddb[noheader=false]{misure}{dati.dat}
\begin{document}
\begin{tikzpicture}
\tikzfading [name=dissolvenza, top color=transparent!0, bottom color=transparent!95]
\tikzstyle{ripieno}=[top color=DodgerBlue, bottom color=RoyalBlue, general shadow={fill=black, shadow yshift=-0.8ex, path fading=dissolvenza}]
\def\h{0.3} % semialtezza del rettangolo\begin{axis} [xmin=2009-03-28, xmax=2012-07-10, y dir=reverse, xmajorgrids=true,
date coordinates in=x, date ZERO=2009-03-28,
xtick={2009-03-28,2009-10-14,2010-05-02,2010-11-18,2011-06-06,2011-12-23,2012-07-10},
xticklabel={\day-\month-\year}, x tick label style={rotate=45,anchor=east},
ytick={1,2,3,4}, ylabel=Misure]\DTLforeach*{misure}%
{\skip=i,\inizio=inizio,\fine=fine}%
{\fill [ripieno] (axis cs:\inizio,\skip) ++ (axis direction cs:2009-03-28,-\h)
rectangle ($(axis cs:\fine,\skip) + (axis direction cs:2009-03-28,\h)$);
\draw (axis cs:2010-01-01,2) node {\DTLcurrentindex};} % riga di prova%\fill [ripieno] (axis cs:2009-04-29,0.7) rectangle (axis cs:2011-11-20,1.3);
%\fill [ripieno] (axis cs:2010-07-18,1.7) rectangle (axis cs:2012-01-18,2.3);
%\fill [ripieno] (axis cs:2009-04-29,2.7) rectangle (axis cs:2012-01-18,3.3);
%\fill [ripieno] (axis cs:2009-06-08,3.7) rectangle (axis cs:2012-01-18,4.3);\addplot [draw=none] coordinates {(2009-03-28,0.7) (2012-07-10,4.3)};
\end{axis}
\end{tikzpicture}
\end{document}`
::
Da quello che ho visto, sono i comandi di TikZ che danno problemi, perché se provi con [tt]\addplot coordinates {(\inizio,\skip)};[/tt] funziona correttamente.P.S.: ora è chiaro perché nel primo messaggio avevo detto che per un elenco così breve sarebbe stato più semplice procedere manualmente…
::Iovem” post=77168Tuttavia il loop non sembra funzionare correttamente.
In che senso? Scusa la domanda sciocca, ma sono riuscito a superare il problema della somma di coordinate però ottengo tutte le barre sovrapposte all’ultima. Vorrei sapere se hai lo stesso problema senza ricompilare tutto, perché in quel caso dovremmo concentrarci sul ciclo e non sulle istruzioni del disegno.
-
AutoreRisposte