2016-10-09 5 views
-1

Ich versuche, zwei Histogramme in R plotly Overlay. Jedoch taucht nur einer von ihnen auf. Hier ist der Code, den ich mit einigen zufälligen Daten verwende:Overlaying zwei Histogramme in R Plotly

myDF <- cbind.data.frame(Income = sample(1:9, size = 1000, replace= TRUE), 
          AgeInTwoYearIncrements = sample(seq(from = 2, to = 70, by = 2), size = 1000, replace = TRUE)) 


plot_ly(data = myDF, alpha = 0.6) %>% 
    add_histogram(x = ~Income, yaxis = "y1") %>% 
    add_histogram(x = ~AgeInTwoYearIncrements, yaxis = "y2") %>% 
    layout(
    title = "Salary vs Age", 
    yaxis = list(
     tickfont = list(color = "blue"), 
     overlaying = "y", 
     side = "left", 
     title = "Income" 
    ), 
    yaxis2 = list(
     tickfont = list(color = "red"), 
     overlaying = "y", 
     side = "right", 
     title = "Age" 
    ), 
    xaxis = list(title = "count") 
) 

Jede Hilfe wäre sehr willkommen!

Antwort

2

Es ist die Hauptursache für die erste Y-Achse overlaying zu geben. Und weil xaxis ist count, Income und Age ist y.

plot_ly(data = myDF, alpha = 0.6) %>% 
    add_histogram(y = ~Income, yaxis = "y1") %>% # not `x =` 
    add_histogram(y = ~AgeInTwoYearIncrements, yaxis = "y2") %>% 
    layout(
    title = "Salary vs Age", 
    yaxis = list(
     tickfont = list(color = "blue"), 
     # overlaying = "y",  # the main cause is this line. 
     side = "left", 
     title = "Income" 
    ), 
    yaxis2 = list(
     tickfont = list(color = "red"), 
     overlaying = "y", 
     side = "right", 
     title = "Age" 
    ), 
    xaxis = list(title = "count") 
) 

enter image description here

[Editiert: nur Flip]
plot_ly(data = myDF, alpha = 0.6) %>% 
    add_histogram(x = ~ Income, xaxis = "x1") %>% 
    add_histogram(x = ~ AgeInTwoYearIncrements, xaxis = "x2") %>% 
    layout(
    margin = list(t = 60), 
    title = "Salary vs Age", 
    xaxis = list(
     tickfont = list(color = "blue"), 
     side = "left", 
     title = "Income" 
    ), 
    xaxis2 = list(
     tickfont = list(color = "red"), 
     overlaying = "x", 
     side = "top", 
     position = 0.95, 
     title = "<br>Age" 
    ), 
    yaxis = list(title = "count") 
) 

enter image description here

+0

Kann der Graph um 90 Grad gedreht werden? Damit das Histogramm nach oben zeigt? Vielen Dank! – user1357015

+0

Ich bin mir auch nicht sicher, ob diese Handlung ziemlich sinnvoll ist ... die Zählung ist auf der x-Achse, aber die Ausrichtung ist horizontal? – user1357015

+1

@ user1357015; Nun, ich fühle, was Sie wollen, ist kein Histogramm ... – cuttlefish44

1

Sie können mischen Histogramme:

enter image description here

plot_ly(data = myDF, alpha = 0.6) %>% 
    add_histogram(x = ~Income) %>% 
    add_histogram(x = ~AgeInTwoYearIncrements) %>% 
layout(
    title = "Salary and Age", 
    yaxis = list(
    tickfont = list(color = "blue"), 
    overlaying = "y", 
    side = "left", 
    title = "count" 
), 
    xaxis = list(title = "Salary and Age value") 
) 

Ein Histogramm hat normalerweise auf der Y-Achse die Frequenz/Anzahl und nicht auf der X-Achse. Wir können ein Diagramm wie gewünscht erstellen, aber ich bin mir nicht sicher, ob es immer noch ein Histogramm ist.

Auch, wie Sie in meinem Bild sehen Sie die Frequenz/zählt für Gehalt (hier blau) ist hoch und die Variabilität ist weniger als Alter. Das macht es für ein gut aussehendes Diagramm schwierig. Vielleicht ist dies nur ein Problem Ihrer Probendaten ...

Wenn Sie also mit der Histogrammfunktion gehen möchten, müssen Sie die Bedeutung der Frequenz und den Wert auf der x-Achse invertieren.

Aber ich denke sowieso, ein Scaternplot wäre eine bessere Lösung, um die Beziehung zwischen Gehalt und Alter zu zeigen.

edit:

Dies ist das Ergebnis, das ich erhalte, wenn ich Ihren Code ausführen:

enter image description here

Mag ich sehe nicht den Sinn in der Handlung und was Sie wollen. Die erste orangefarbene Spalte hat die Bedeutung, dass ein Alter von 59 in Ihrem Datensatz zwischen 0 und 5 Mal auftritt. Die dritte Spalte bedeutet ein Alter von 88 Monaten zwischen 10 und 15 Mal in Ihrem Datensatz. Um diese Informationen in einem Barplot darzustellen, funktionieren sie nicht. Weil Sie mehrere Alterswerte in der Kategorie der Zählungen haben können ... Ich hoffe, das ist klar.

Wie auch immer, um Ihre Frage zu beantworten, brauche ich mehr Klärung.