In Matlab gibt es die Funktion "scatterhist". Das ist letztlich ein Scatterplot mit Histogrammen/Boxplots für die betreffende Datenreihe an den Achsen. Ist es möglich ein solches Plot mit gnuplot zu erstellen?alt text

Quelle: Stackoverflow

gefragt 09 Mai '16, 23:39

wiewowas's gravatar image

wiewowas
437203040
Akzeptiert-Rate: 40%

1

Müsste möglich sein. Vielleicht kann man sich hieran orientieren: http://gnuplot.sourceforge.net/demo_5.0/margins.html Stichwort aligned plots.

Ich würde aber vermutlich eher auf python/matplotlib zurückgreifen und in tikz exportieren, vgl. http://matplotlib.org/examples/pylab_examples/scatter_hist.html

Mit pgfplot kann man vermutlich auch ein solches Diagramm erstellen.

(10 Mai '16, 14:57) feynman
2

Für gnuplot bist du hier leider falsch. Ich habe mal eine Antwort mit pgfplots in LaTeX gemacht. Prinzipiell solltest du immer ein Minimalbeispiel zu einer spezifischen Frage (genauer als »Ich will ein Bild das so aussieht«) zeigen. Es gibt selten jemanden, der sich erbarmt deine Faulheit auszugleichen.

(10 Mai '16, 15:57) Henri

»Ich will ein Bild das so aussieht« lese ich nur in deinem Post. Wozu du mich dann direkt als "faul" beschimpfen musst erschließt sich mir nicht. Danke trotzdem für dein "Erbarmen" =)

(03 Jun '16, 14:20) wiewowas
1

Weil so eine Frage schon sehr im Stil von: »Macht mal die ganze Arbeit für mich.« ist. Das kommt selten gut an, selbst wenn es gar nicht so gemeint war. In anderen Foren werden solche Fragen häufig einfach geschlossen. Das gilt umso mehr, wenn die Frage keinen erkennbaren Bezug zum Forenthema hat, also auch noch als off-topic einzustufen wäre.

(03 Jun '16, 15:15) saputello

Man kann solche einen Graphen mit pgfplots erzeugen. Um aus einer Tabelle ein Histogramm zu erstellen benötigt man die statistics-Bibliothek von pgfplots. Ich habe die Zufallszahlen mit Lua generiert. Da Lua leider nur gleichverteilte Zufallszahlen kann habe ich die Box-Muller-Transformation zur Erzeugung Gauß-verteilter Zufallszahlen implementiert. Wenn man statt des Lua-Codes lieber eine eigene Datei verwenden möchte, so ersetzt man

Open in Online-Editor
\generatetable{1000}\loadedtable

durch

Open in Online-Editor
\pgfplotstableread{<Dateiname>}\loadedtable

dann wird auch kein LuaTeX mehr benötigt.

Open in Online-Editor
\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{statistics}
\usepackage{luacode}
\begin{luacode*}
-- Initialize the random number generator according to
-- http://lua-users.org/wiki/MathLibraryTutorial
math.randomseed( tonumber(tostring(os.time()):reverse():sub(1,6)) )

-- standard Box-Muller transform
-- https://en.wikipedia.org/wiki/Box-Muller_transform
function gauss_random(mu, sigma)
   -- State variables
   local generate = false
   local z0 = 0.0
   local z1 = 0.0

   -- Parameters
   local mu = mu or 0.0
   local sigma = sigma or 1.0

   local function random()
      generate = not generate

      if (not generate) then
         return z1 * sigma + mu;
      end

      local u1, u2
      repeat
         u1 = math.random()
         u2 = math.random()
      until ( u1 > 1e-16 )

      z0 = math.sqrt(-2.0 * math.log(u1)) * math.cos(2*math.pi * u2)
      z1 = math.sqrt(-2.0 * math.log(u1)) * math.sin(2*math.pi * u2)
      return z0*sigma + mu
   end

   return random
end

function generate_table(N)
   local gauss = gauss_random()
   tex.sprint("{\r")
   tex.sprint("x y\r")
   for i = 1, N do
      tex.sprint(gauss() .. " " .. gauss() .. "\r")
   end
   tex.sprint("}")
end
\end{luacode*}
\newcommand\generatetable[2]{%
  \expandafter\pgfplotstableread\directlua{generate_table(#1)}#2
}
\begin{document}
\generatetable{1000}\loadedtable
\begin{tikzpicture}
  \begin{axis}[
    name=main,grid=major,xlabel={$x$},ylabel={$y$},
    yticklabel pos=right,ylabel near ticks,
    width=8cm,height=8cm,enlargelimits=false,
    xmin=-4,xmax=4,ymin=-4,ymax=4
    ]
    \addplot+[only marks,mark=o] table {\loadedtable};
    \addlegendentry{data};
  \end{axis}
  \begin{axis}[
    at=(main.below south),anchor=north,rotate=180,
    width=8cm,height=4cm,enlargelimits=false,
    axis lines=none,ybar
    ]
    \addplot+[hist={bins=30,data min=-4,data max=4}]
      table [y index=0] {\loadedtable};
  \end{axis}
  \begin{axis}[
    at=(main.right of east),anchor=west,rotate=-90,
    width=8cm,height=4cm,enlargelimits=false,
    axis lines=none,ybar
    ]
    \addplot+[hist={bins=30,data min=-4,data max=4}]
      table [y index=1] {\loadedtable};
  \end{axis}
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 10 Mai '16, 15:48

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 18 Aug '16, 11:55

@Henri, mit deinem Wissen wirst Du mir langsam unheimlich. :-) Tolles Beispiel!!

(08 Jun '16, 09:25) dzaic
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:

×11
×4
×2
×1

gestellte Frage: 09 Mai '16, 23:39

Frage wurde gesehen: 9,518 Mal

zuletzt geändert: 18 Aug '16, 11:55