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, 05:30

Linux404's gravatar image

Linux404
2946
Akzeptiert: 62%

bearbeitet 27 Aug, 06:56

saputello's gravatar image

saputello
18.4k22352

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

(22 Aug, 07:43) Linux404

Versteh ich nicht. Brauchst du sowas?

(22 Aug, 11: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, 01: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, 12: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, 07: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, 17:58

Henri's gravatar image

Henri
10.0k31730

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×160
×29

Frage gestellt: 22 Aug, 05:30

Frage wurde angeschaut: 447 Mal

Zuletzt aktualisiert: 27 Aug, 06:56