In meinem Diagramm, habe ich mehrere Koordinaten-Punkte. Diese Koordinatenpunkte besitzen auch einen Wert (Spalte C in meinem Table). Ich möchte den Koordinaten Punkt mit einem Rechteck ersetzen. (Die Rechtecke haben jedesmal die gleiche Größe) Die Füllung von diesem Rechtecks soll dem Wert des Punktes entsprechen (Spalte C im Table). Danke Open in Online-Editor
\documentclass{article} \usepackage{pgfplots} \usepackage{pgfplotstable} \pgfplotsset{compat=newest} \pgfdeclareplotmark{filled circle}{% \pgfpathellipse {\pgfpointorigin}% {\pgfqpoint{\pgfplotmarksize}{0sp}}% {\pgfqpoint{0sp}{\pgfplotmarksize}}% \pgfusepathqfill% mark=* uses \pgfusepathqfillstroke instead } \begin{document} \pgfplotstableread{ A B C 1 1.5 10 2 2 40 3. 4.2 2000 1.6 4.5 400 }\datentabelle \begin{tikzpicture} \begin{axis}[ colorbar, grid=both, xmin=0, xmax=9, ymin=0, ymax=9, legend entries={$\tau$}, title=Diagramm ] \addplot[ scatter, only marks, scatter src=explicit, mark=filled circle, mark options={draw=none}, scatter/@pre marker code/.append style={% /tikz/mark size={.8pt+\pgfplotspointmetatransformed/550}, }, ] table[meta expr=abs(\thisrow{C})] {\datentabelle}; \end{axis} \end{tikzpicture} \end{document} Danke. |
Open in Online-Editor
\begin{filecontents*}{\jobname.dat} A B C 1 1.5 10 2 2 40 3. 4.2 2000 1.6 4.5 400 \end{filecontents*} \documentclass{article} \usepackage{pgfplots} \usepackage{pgfplotstable} \pgfplotsset{compat=1.11} \usepackage{luacode} \begin{luacode*} -- http://lua-users.org/wiki/SplitJoin function string:split(sep) local sep, fields = sep or ":", {} local pattern = string.format("([^%s]+)", sep) self:gsub(pattern, function(c) fields[#fields+1] = c end) return fields end function read_table(fname) local tab = {} for line in io.lines(fname) do local fields = line:split(' ') local _x, _y, _z = fields[1], fields[2], fields[3] local x, y, z = tonumber(_x), tonumber(_y), tonumber(_z) if x and y and z then tab[#tab+1] = { x = x, y = y, z = z } end end return tab end function generate_hist(tab,xmin,xmax,Nx,ymin,ymax,Ny) local xstep = (xmax - xmin) / (Nx-1) local ystep = (ymax - ymin) / (Ny-1) tex.sprint("{\r") tex.sprint("x y z\r") for x = xmin,xmax,xstep do for y = ymin,ymax,ystep do local bins = 0 for i = 1,#tab do if (x-xstep/2 <= tab[i].x and tab[i].x < x+xstep/2) and (y-ystep/2 <= tab[i].y and tab[i].y < y+ystep/2) then bins = bins + tab[i].z end end tex.sprint(x .. " " .. y .. " " .. bins .. "\r") end tex.sprint("\r") end tex.sprint("}") end \end{luacode*} \newcommand\readtable[4]{% \directlua{tab = read_table("\luaescapestring{#1}")} \expandafter\pgfplotstableread\directlua{generate_hist(tab,#2,#3)}#4 } \begin{document} \readtable{\jobname.dat}{0,9,10}{0,9,10}\histtable \begin{tikzpicture} \begin{axis}[ colorbar, grid=both, xmin=0, xmax=9, ymin=0, ymax=9, legend entries={,$\tau$}, title=Diagramm ] \addplot[ matrix plot*,mesh/rows=10,mesh/cols=10, point meta=explicit, shader=faceted ] table[meta=z] {\histtable}; \addplot[ scatter, only marks, scatter src=explicit, mark options={very thick}, scatter/@pre marker code/.append style={% /tikz/mark size={ln(1+\pgfplotspointmetatransformed)}, }, ] table[meta expr=abs(\thisrow{C})] {\jobname.dat}; \end{axis} \end{tikzpicture} \end{document} beantwortet 26 Aug '16, 23:58 Henri |
@Henri hast du diesbezüglich was im Ärmel? Danke
Versteh ich nicht. Brauchst du sowas?
@Henri Ja genau so etwas. Das jeweilige Feld, wo der Punkt drinnen liegt, soll entsprechend der Höhe des Wertes (mit dem der Punkt definiert ist) engefärbt werden.
Ich brauche diese Art von Diagramm für einen automatischen Report einer Datenanalyse für ein Forschungsprojekt auf der Uni. Dieser Report wird mit c#, Latex und einem xml-File realisiert.
Das wäre eigentlich meine letzte Frage diesbezüglich. Ich hoffe, ich kann es realisieren. Momentan liegt das Problem nur auf der Latex-Seite.
@Linux404 So, so. »Aufgabenstellung«… Diese Frage und dein letzter Kommentar lesen sich eher so, als sollte ich deine Aufgabe für den Uni-Report lösen.
@henri nein dem ist nicht so .... Die uni hat ihren Betrieb erst wieder im Oktober ..... Da ich leider nicht Informatik studiere sondern Elektrotechnik bin ich bei Latex und beim Programmieren nicht so gut .. Ich werde morgen das Problem selber angehen :)