Ich benutze R und habe zwei Datenrahmen: Karotten und Gurken. Jeder Datenrahmen hat eine einzelne numerische Spalte, in der die Länge aller gemessenen Karotten (insgesamt: 100.000 Karotten) und Gurken (insgesamt: 50.000 Gurken) aufgeführt ist.
Ich möchte zwei Histogramme - Karottenlänge und Gurkenlänge - auf derselben Handlung zeichnen. Sie überschneiden sich, also brauche ich wohl auch etwas Transparenz. Ich muss auch relative Häufigkeiten verwenden, keine absoluten Zahlen, da die Anzahl der Instanzen in jeder Gruppe unterschiedlich ist.
so etwas wäre schön, aber ich verstehe nicht, wie ich es aus meinen beiden Tabellen erstellen soll:
Antworten:
Das Bild, mit dem Sie verknüpft haben, war für Dichtekurven gedacht, nicht für Histogramme.
Wenn Sie auf ggplot gelesen haben, fehlt Ihnen möglicherweise nur die Kombination Ihrer beiden Datenrahmen zu einem langen.
Beginnen wir also mit so etwas wie dem, was Sie haben, zwei getrennten Datensätzen und kombinieren sie.
Danach, was nicht erforderlich ist, wenn Ihre Daten bereits im Langformat vorliegen, benötigen Sie nur noch eine Zeile, um Ihren Plot zu erstellen.
Wenn Sie nun wirklich Histogramme wollten, funktioniert Folgendes. Beachten Sie, dass Sie die Position gegenüber dem Standardargument "Stapel" ändern müssen. Sie könnten das vermissen, wenn Sie nicht wirklich eine Vorstellung davon haben, wie Ihre Daten aussehen sollten. Ein höheres Alpha sieht dort besser aus. Beachten Sie auch, dass ich es Dichtehistogramme gemacht habe. Es ist einfach, das zu entfernen
y = ..density..
, um es wieder zu zählen.quelle
ggplot(vegLengths, aes(length, fill = veg)) + geom_bar(pos="dodge")
. Dadurch werden Interlaced-Histogramme erstellt, wie in MATLAB.Hier ist eine noch einfachere Lösung mit Basisgrafiken und Alpha-Blending (die nicht auf allen Grafikgeräten funktioniert):
Der Schlüssel ist, dass die Farben halbtransparent sind.
Bearbeiten, mehr als zwei Jahre später : Da dies gerade positiv bewertet wurde, kann ich auch ein Bild davon hinzufügen, was der Code erzeugt, da Alpha-Blending so verdammt nützlich ist:
quelle
plot
Befehle getrennt? Sie können alle diese Optionen in diehist
Befehle einfügen und nur zwei in die beiden Zeilen.plot
Befehl wie gesagt direkt in den Befehl hist ein. Das Posten des Codes ist nicht das, wofür Kommentare gedacht sind.Hier ist eine Funktion, die ich geschrieben habe und die Pseudotransparenz verwendet, um überlappende Histogramme darzustellen
Hier ist eine andere Möglichkeit, die Unterstützung von R für transparente Farben zu verwenden
Die Ergebnisse sehen ungefähr so aus:
quelle
postscript
)Es gibt bereits schöne Antworten, aber ich dachte darüber nach, diese hinzuzufügen. Sieht gut für mich aus. (Kopierte Zufallszahlen von @Dirk).
library(scales)
wird benötigt`Das Ergebnis ist...
Update: Diese überlappende Funktion kann auch für einige nützlich sein.
Ich finde das Ergebnis von
hist0
ist schöner alshist
Das Ergebnis von
ist
quelle
Hier ist ein Beispiel, wie Sie dies in "klassischen" R-Grafiken tun können:
Das einzige Problem dabei ist, dass es viel besser aussieht, wenn die Histogrammumbrüche ausgerichtet sind, was möglicherweise manuell erfolgen muss (in den an übergebenen Argumenten
hist
).quelle
ggplot
), die direkt erklärt, ob Ihre beiden Histogramme wesentlich unterschiedliche Stichprobengrößen aufweisen.breaks=seq(min(data$some_property), max(data$some_property), by=(max_prop - min_prop)/20)
Hier ist die Version wie die ggplot2, die ich nur in Base R gegeben habe. Ich habe einige von @nullglob kopiert.
Generieren Sie die Daten
Sie müssen es nicht wie bei ggplot2 in einen Datenrahmen einfügen. Der Nachteil dieser Methode ist, dass Sie viel mehr Details der Handlung aufschreiben müssen. Der Vorteil ist, dass Sie die Kontrolle über weitere Details des Diagramms haben.
quelle
@ Kirk Eddelbuettel: Die Grundidee ist ausgezeichnet, aber der gezeigte Code kann verbessert werden. [Die Erklärung dauert lange, daher eine separate Antwort und kein Kommentar.]
Die
hist()
Funktion zeichnet standardmäßig Diagramme, daher müssen Sie dieplot=FALSE
Option hinzufügen . Darüber hinaus ist es klarer, den Plotbereich durch einenplot(0,0,type="n",...)
Aufruf festzulegen , in dem Sie die Achsenbeschriftungen, den Plottitel usw. hinzufügen können. Abschließend möchte ich erwähnen, dass man auch Schattierungen verwenden kann, um zwischen den beiden Histogrammen zu unterscheiden. Hier ist der Code:Und hier ist das Ergebnis (etwas zu breit wegen RStudio :-)):
quelle
postscript
Geräten funktioniert .Die R-API von Plotly könnte für Sie nützlich sein. Die Grafik unten ist hier .
Vollständige Offenlegung: Ich bin im Team.
quelle
So viele gute Antworten, aber da ich gerade eine function (
plotMultipleHistograms()
) -Funktion geschrieben habe, dachte ich, ich würde eine weitere Antwort hinzufügen.Der Vorteil dieser Funktion besteht darin, dass sie automatisch die entsprechenden Grenzwerte für die X- und Y-Achse festlegt und einen gemeinsamen Satz von Bins definiert, die für alle Verteilungen verwendet werden.
So verwenden Sie es:
Die
plotMultipleHistograms()
Funktion kann eine beliebige Anzahl von Verteilungen nehmen und alle allgemeinen Plotten Parameter sollen mit ihm arbeiten (zum Beispiel:las
,main
, etc.).quelle