PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ArrayPlot mit pgfplots



dim
28-01-2011, 14:57
Hallo zusammen,

ich will mit pgfplots ein Diagramm ähnlich dem ArrayPlot von Mathematica erstellen:

http://reference.wolfram.com/mathematica/ref/Files/ArrayPlot.en/O_12.gif

Ist es mit pgfplots möglich? Wie kann es machen?

Viele Grüße,
dim

dim
28-01-2011, 19:55
ich habe mir die Dokumentation von Tikz und pgfplots angeschaut, aber leider keine Möglichkeit gefunden so ein Diagramm darzustellen.

Womit kann ich es in LaTeX zeichnen?

voss
28-01-2011, 23:53
ich habe mir die Dokumentation von Tikz und pgfplots angeschaut, aber leider keine Möglichkeit gefunden so ein Diagramm darzustellen.

Womit kann ich es in LaTeX zeichnen?

Seite 81 in der Doku zu pstricks-add findest du Beispiele

Herbert

Sepp99
29-01-2011, 11:57
@herbert
Ich habe mir aus reiner Neugier einmal so ein Beispiel gebastelt:

\documentclass[a4paper]{book}
\usepackage{xcolor}
\usepackage{pstricks,pstricks-add}

\usepackage{filecontents}
\begin{filecontents}{matrix1.data}
/dotmatrix [ % <------------ important line
3 0 0 0 0 0 0 0 1 2
0 0 0 0 0 0 0 1 2 1
0 0 0 0 0 0 1 2 1 0
0 0 0 0 0 1 2 1 0 0
0 0 0 0 1 2 1 0 0 0
0 0 0 1 2 1 0 0 0 0
0 0 1 2 1 0 0 0 0 0
0 1 2 1 0 0 0 0 0 0
1 2 1 0 0 0 0 0 0 0
2 1 0 0 0 0 0 0 0 3
] def % <------------ important line
\end{filecontents}


\begin{document}

\psscalebox{0.6}{%
\begin{pspicture}(-0.5,-0.75)(11,11)
\psaxes{->}(11,11)
\psMatrixPlot[colorType=3,dotsize=1.1cm,xStep=1,yStep=1,dotstyle =square*]{10}{10}{matrix1.data}
\end{pspicture}}

\end{document}

Meine Frage dazu: kann ein neuer colorType erzeugt werden, so dass 0=weiß, 9=schwarz und dazwischen gleichmäßige Graustufen sind?

Habe zwar Versuche folgender Art getestet

\newcommand\colorTypeA{%
\definecolor{ColorA}{cmyk}{0.1,0.1,0.05,0}
\definecolor{ColorB}{cmyk}{0.15,0.15,0.05,0}
...
}
\newcommand\colorTypeB{%
\definecolor{ColorA}{cmyk}{0.1,0.2,0.1,0}
\definecolor{ColorB}{cmyk}{0.15,0.2,0.15,0}
...
}

aus dem Platin-Paket, komme da aber auch auf keinen grünen Zweig.

Gruß, Sepp.-

voss
29-01-2011, 12:45
Ich habe mir aus reiner Neugier einmal so ein Beispiel gebastelt:
Meine Frage dazu: kann ein neuer colorType erzeugt werden, so dass 0=weiß, 9=schwarz und dazwischen gleichmäßige Graustufen sind?



http://voss.homedns.org/pstricks-add.tex
Mit der Version kannst du eine eigene Farbdefintion vornehmen, die hier allerdings auf PostScript-Ebene erfolgen muss. Damit die Klammern auch
in der Ausgabe landen, musst du sie als
\pslbrace={ und \psrbrace=} maskieren. Dadurch wirkt die Definition
etwas unübersichtlich. Ich ersetze daher die Klammern erst, wenn
ich den Ausdruck fertig habe. colorType=5 ist noch wichtig


\psMatrixPlot[
colorType=5,
colorTypeDef={
dup /value exch def % Wert speichern
value 0 eq
\pslbrace 1 setgray \psrbrace
\pslbrace value 1 eq
\pslbrace 0 setgray \psrbrace
\pslbrace Min sub dMaxMin div neg 1 add 300 mul 400 add
\pswavelengthToGRAY setgray \psrbrace ifelse
\psrbrace ifelse \space
},
dotsize=1.1cm,xStep=1,yStep=1,dotstyle=square*]{10}{10}{matrix1.data}
Wenn du das ganze nachvollziehen willst, dann ersetze die \psl/rbrace

Wenn es nicht auf die Geschwindigkeit ankommt, weil es mehr als 1000 Werte
sind, kann man auch die einfache Variante nehmen. Erst normale FArbe nehmen,
dann gucken, ob Weiß oder Schwarz.


colorTypeDef={
dup /value exch def % Wert speichern
value Min sub dMaxMin div neg 1 add 300 mul 400 add \pswavelengthToGRAY
value 0 eq \pslbrace 1 \psrbrace if
value 1 eq \pslbrace 0 \psrbrace if
setgray
},

Ausgabe hängt an

habe die Version nochmal geändert, sodass man alternativ den PostScript code auch
in die Datendatei schreiben kann. Muss mit /colorTypeDef {...} definiert werden:


\begin{filecontents}{matrix1.data}
/colorTypeDef {
dup /value exch def
value 0 eq
{ 1 setgray }
{ value 1 eq
{ 0 setgray }
{ Min sub dMaxMin div neg 1 add 300 mul 400 add
% \pswavelengthToRGB not possible
tx@addDict begin wavelengthToRGB Red Green Blue end
setrgbcolor
} ifelse
} ifelse
} def
/dotmatrix [ % <------------ important line
3 0 0 0 0 0 0 0 1 2
0 0 0 0 0 0 0 1 2 1
8 0 0 0 0 0 1 2 1 0
0 0 0 0 0 1 2 1 0 0
0 0 0 0 1 2 1 0 0 0
9 0 0 1 2 1 3 0 0 0
0 0 1 2 1 4 0 0 0 0
0 1 2 1 5 0 0 0 0 0
1 2 1 6 0 0 0 0 0 0
2 1 7 0 0 0 0 0 0 3
] def % <------------ important line
\end{filecontents}
\psscalebox{0.7}{%
\begin{pspicture}(-0.5,-0.75)(11,11)
\psaxes[ticksize=-5pt 0]{->}(11,11)
\psMatrixPlot[colorType=5,dotsize=1.1cm,xStep=1,yStep=1,
dotstyle=square*]{10}{10}{matrix1.data}
\end{pspicture}}


Herbert

dim
29-01-2011, 23:27
@Voss und @Sepp99
Danke sehr für eure Antworten!

Leider ist die Lösung mit PSTricks ein bisschen zu umständlich für mich,
da ich fast alle Bilder mit pgfplots erstellt habe. Bei der Verwendung dieser Lösung soll ich weitere große Pakete einbinden... und dann noch eps in pdf konvertieren.

voss
30-01-2011, 09:15
@Voss und @Sepp99
Danke sehr für eure Antworten!

Leider ist die Lösung mit PSTricks ein bisschen zu umständlich für mich,
da ich fast alle Bilder mit pgfplots erstellt habe. Bei der Verwendung dieser Lösung soll ich weitere große Pakete einbinden... und dann noch eps in pdf konvertieren.

wo steht, dass du eps in pdf konvertieren sollst?

Herbert

Sepp99
30-01-2011, 09:29
@Herbert
Danke für Deine ausführliche Antwort. Ein paar Kleinigkeiten muß ich noch einstellen, auch ich hätte nicht gedacht, dass dies nur über PS geht.
Das wird mich sicher noch einige Zeit beschäftigen, denn ich will und werde die Hintergründe noch intus kriegen. Zum Glück drängt mich ja nichts, wie gesagt - nur aus Neugier.

LG, Sepp.-

dim
30-01-2011, 15:54
@Herbert



wo steht, dass du eps in pdf konvertieren sollst?


Ich übersetze das Dokument momentan mit pdflatex (tex -> pdf).
Wenn ich es richtig verstehe (ich bin noch ein Anfänger), falls ich das pstricks-Paket verwenden werde, dann soll ich den Umweg "tex -> ... -> eps -> pdf" nehmen.

Oder gibt es eine andere einfache Möglichkeit dafür?

voss
30-01-2011, 17:02
Ich übersetze das Dokument momentan mit pdflatex (tex -> pdf).
Wenn ich es richtig verstehe (ich bin noch ein Anfänger), falls ich das pstricks-Paket verwenden werde, dann soll ich den Umweg "tex -> ... -> eps -> pdf" nehmen.

Oder gibt es eine andere einfache Möglichkeit dafür?

du wählst in deinem Editor statt pdflatex einfach xelatex, dann kannst du sogar
TrueType-Schriften verwenden.

Herbert

dim
30-01-2011, 17:58
Hallo Herbert,

danke für deine Hilfe!

Ich habe aber noch eine Frage:


du wählst in deinem Editor statt pdflatex einfach xelatex, dann kannst du sogar TrueType-Schriften verwenden.

ich verwende Eclipse mit einem Texclipse-Plugin und übersetze das Dokument mit einer make-Datei:



# "------ 1. Dokument erstellen ------"
pdflatex main.tex
# "------ 2. Literaturverzeichnis erzeugen ------"
bibtex main.tex
# "------ 3. Glossar, Symbol- und Abkürzungsverzeichnis erzeugen ------"
makeindex -s main.ist -t main.alg -o main.acr main.acn
makeindex -s main.ist -t main.glg -o main.gls main.glo
makeindex -s main.ist -t main.slg -o main.syi main.syg
# "------ 4. PDF-Dokument erzeugen, Glossar einbinden und Literaturverzeichnis ------"
pdflatex main.tex


Falls ich das pstricks-Paket in dem Dokument verweden werde,
soll ich dann einfach "pdflatex" durch "xelatex" ersetzen?
Entstehen dadurch keine weitere Komplikationen?

voss
30-01-2011, 18:11
Ich habe aber noch eine Frage:

Falls ich das pstricks-Paket in dem Dokument verweden werde,
soll ich dann einfach "pdflatex" durch "xelatex" ersetzen?
Entstehen dadurch keine weitere Komplikationen?

ja, einfaches ersetzen reicht. Lediglich die Eingabekodierung ist per Definition echtes UTF und die Auswahl der Fonts ist anders, weil man mit xelatex mehr Möglichkeiten hat.
Aber _echte_ Probleme gibt es nicht.

dim
30-01-2011, 18:13
ja, einfaches ersetzen reicht. Lediglich die Eingabekodierung ist per Definition echtes UTF und die Auswahl der Fonts ist anders, weil man mit xelatex mehr Möglichkeiten hat.
Aber _echte_ Probleme gibt es nicht.

danke voss,

ich werde es heute ausprobieren.