2017-11-11 4 views
2

Ich experimentiere mit Data Mining mit dem rOpenSci-Netzwerk. Ich verwende das Paket rFisheries, um Landungsdaten zwischen zwei Fischarten zu vergleichen.Plotting zwei Reihen Liniendiagramm R

Ich habe die Arten von Daten in zwei Datenrahmen:

mako.landings <- structure(list(year = 1950:1959, mako_catch = c(187255L, 220140L, 
232274L, 229993L, 194596L, 222927L, 303772L, 654384L, 1110352L, 
2213202L)), .Names = c("year", "mako_catch"), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame")) 

und

cod.landings <- structure(list(year = 1950:1959, cod_catch = c(77878, 96995, 
198061, 225742, 237730, 230289, 245971, 300765, 311501, 409395 
)), .Names = c("year", "cod_catch"), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame")) 

Diese Datenrahmen haben beide 65 Zeilen mit dem Jahr 2014 endet Ich versuche, ein zu produzieren Liniendiagramm mit dem Jahr auf der x-Achse, der Fang auf der y-Achse, und zwei Reihen, eine für jede Art.

Ich hatte mehrere Versuche mit ggplot, einschließlich der Beitritt zu den Datenrahmen, aber sie alle Zahlen produzieren, wo die Kabeljau Daten sehr gedrückt wird, sieht fast wie eine Flatline im Vergleich zu den Mako-Daten. Etwas stimmt nicht, denn wenn ich die Daten von cod.landings für sich selbst zeichne, sieht das ganz anders aus.

library(dplyr) 
library(ggplot2) 

combined.landings <- inner_join(mako.landings, cod.landings, by = "year") 

#plotting data from joined tables 
ggplot() + 
    geom_line(data = combined.landings, aes(x = year, y = mako_catch), colour = "dodgerblue") + 
    geom_line(data = combined.landings, aes(x = year, y = cod_catch), colour = "red") 

enter image description here

#plotting the cod and mako data separately 
p <- ggplot(mako.landings, aes(year, mako_catch)) + 
     geom_line(colour = "dodgerblue") + labs(y = "Catch (tonnes)") + labs(x = "Year") 
p 

enter image description here

p <- p + geom_line(data = cod.landings, aes(year, cod_catch), colour = 
"red") 
p 

enter image description here

#a different attempt at plotting cod and mako data separately 
ggplot() + 
    geom_line(data = mako.landings, aes(year, mako_catch, color = mako_catch)) + 
    geom_line(data = cod.landings, aes(year, cod_catch, color = cod_catch)) 

enter image description here

Gibt es etwas, was ich falsch im obigen Code getan habe? Oder eine andere Methode, um den gewünschten Graphen zu erzeugen? Ich fand eine ähnliche Frage an anderer Stelle, aber die Lösung bestand darin, die Daten in einen neuen Datenrahmen zu schreiben, was ich lieber vermeiden würde, da es 65 Beobachtungen jeder Spezies gibt, die neu geschrieben werden müssten.

Danke

+0

ich Sie durch die Aktualisierung der Code dazu beigetragen haben, Ihrem Beispiel Datenrahmen zu erzeugen, zu laden, die Code-Pakete, und die daraus resultierenden Plots. Grundsätzlich denke ich, dass dein Code wie erwartet funktioniert. Es ist mir ein wenig unklar, wonach Sie suchen. Ist Ihnen aufgefallen, dass die Zahlen in den beiden Datenrahmen nicht in der gleichen Größenordnung liegen? – www

Antwort

0

Nach einigen Gedanken, denke ich, was Cedric vorgeschlagen wahrscheinlich das, was Sie suchen, ein Facette Grundstück mit freier y-Achse . Auf diese Weise können Sie den Trend der verschiedenen Arten sehen. PoGibas bot auch eine gute Möglichkeit, Ihren Datenrahmen zu organisieren, was ein Ansatz ist, der häufiger vorkommt als das, was Sie gerade organisieren.

Hier werde ich meinen Ansatz zur Verfügung gestellt.Ich möchte Ihnen zeigen, wie Sie Ihren Wide-Format-Datenrahmen combined.landings in ein Langformat konvertieren und zum Plotten verwenden können.

# Load packages 
library(dplyr) 
library(tidyr) 
library(ggplot2) 

# Join two data frames 
combined.landings <- inner_join(mako.landings, cod.landings, by = "year") 

combined.landings2 <- combined.landings %>% 
    # Convert the data frame from wide format to long format 
    gather(Species, Catch, -year) %>% 
    # Further clean the species column by removing "_catch" 
    mutate(Species = sub("_catch", "", Species)) 

Werfen Sie einen Blick auf combined.landings2. Dies ist das Format, das zum Plotten in ggplot2 geeignet ist.

combined.landings2 
# # A tibble: 20 x 3 
#  year Species Catch 
#  <int> <chr> <dbl> 
# 1 1950 mako 187255 
# 2 1951 mako 220140 
# 3 1952 mako 232274 
# 4 1953 mako 229993 
# 5 1954 mako 194596 
# 6 1955 mako 222927 
# 7 1956 mako 303772 
# 8 1957 mako 654384 
# 9 1958 mako 1110352 
# 10 1959 mako 2213202 
# 11 1950  cod 77878 
# 12 1951  cod 96995 
# 13 1952  cod 198061 
# 14 1953  cod 225742 
# 15 1954  cod 237730 
# 16 1955  cod 230289 
# 17 1956  cod 245971 
# 18 1957  cod 300765 
# 19 1958  cod 311501 
# 20 1959  cod 409395 

Jetzt können wir das Facettenplot plotten. ~Species bedeutet, wir wollen die Facettierung basiert auf der Species Spalte. scales = "free_y" ist erforderlich, sonst wird die y-Achse fixiert.

ggplot(combined.landings2, aes(x = year, y = Catch, color = Species)) + 
    geom_line(size = 2) + 
    facet_wrap(~Species, scales = "free_y") 

enter image description here

+1

Ja ist ziemlich genau, was ich im Sinn hatte. Danke, das ist unglaublich! Ich habe deinen ersten Kommentar zu den jeweiligen Größen gesehen ... Ich habe es bemerkt. Als ich den gesamten Datensatz gezeichnet hatte (1950-2014), sah es einfach nicht so aus, als ob die Werte in der Reihe mit den Werten im Datenrahmen übereinstimmen würden. Ich hätte diesen Punkt vielleicht durchlesen können, wenn ich dies als eine reproduzierbare Frage richtig gestellt hätte (was ich jetzt als wichtig erachte). Aber diese Zahlen sollten funktionieren, sie sind großartig. Danke nochmal für die Hilfe von allen! –

1

Wenn Sie Ihre Daten per Post ist besser, wenn man von den Menschen Ihre Daten in einem Format, leicht zu lesen liefern wollen bei reproducible example einen Blick helfen, bitte. Ich habe also nicht versucht, Ihre Daten zu verwenden, und gebe Ihnen nur ungeprüften Code.

In ggplot ist es am besten, wenn Ihre Daten im langen Format vorliegen, hier gebe ich ein Beispiel, in dem Zeilen von Jahren wiederholte Daten sind, und es gibt eine Spalte, die das Spezies-Attribut angibt.

mako.landings$species <- "mako" 
cod.landings$species <- "cod" 
combined_landings <- rbind(mako.landings,cod.landings) 
#plotting data from joined tables 
ggplot() + geom_line(data = combined.landings, aes(x = year, y = 
        mako_catch, colour = "species")) 

Jetzt löst dies Ihr Problem nicht, die Landungen haben nicht die gleiche Größenordnung.

Sie erreichen könnten zwei verschiedene Parzellen mit unterschiedlichen Skalen wie folgt zu erhalten:

ggplot() + geom_line(data = combined.landings, aes(x = year, y = 
       mako_catch))+facet_wrap(~species,scales="free")