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.

gefragt 22 Aug '16, 11:30

Linux404's gravatar image

Linux404
3221422
Akzeptiert-Rate: 100%

bearbeitet 27 Aug '16, 12:56

saputello's gravatar image

saputello
11.1k154365

@Henri hast du diesbezüglich was im Ärmel? Danke

(22 Aug '16, 13:43) Linux404

Versteh ich nicht. Brauchst du sowas?

(22 Aug '16, 17:35) Henri

@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.

(23 Aug '16, 07:38) Linux404

@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.

(23 Aug '16, 18:28) Henri

@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 :)

(24 Aug '16, 13:14) Linux404

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}

alt text

Permanenter link

beantwortet 26 Aug '16, 23:58

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×296
×53

gestellte Frage: 22 Aug '16, 11:30

Frage wurde gesehen: 7,616 Mal

zuletzt geändert: 27 Aug '16, 12:56