绘制两个系列线图R.

时间:2017-11-11 19:46:13

标签: r ggplot2

我正在尝试使用rOpenSci网络进行数据挖掘。我正在使用if ! mkdir "$2"; then echo "I can't create directory $2" >&2 exit 8 fi 包来比较两种鱼之间的着陆数据。

我有两个数据框中的物种数据:

rFisheries

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"))

这些数据框都有65行,年份结束于2014年。我正在尝试生成一个年份在x轴上的线图,y轴上的捕获,并且有两个系列,每个物种一个。

我使用ggplot进行了多次尝试,包括加入数据框,但它们都产生了鳕鱼数据变得非常低落的数据,与mako数据相比几乎看起来像一条平线。出了点问题,因为当我自己绘制来自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")) 的数据时,它看起来非常不同。

cod.landings

enter image description here

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

上面的代码中是否有我做错的事情?或者使用不同的方法生成所需的图形?我在其他地方发现了一个类似的问题,但解决方案涉及将数据写入一个新的数据帧,我宁愿避免,因为每个物种需要重写65个观测值。

谢谢

2 个答案:

答案 0 :(得分:1)

当您发布数据时,最好是以想要提供帮助的人员轻松阅读的格式提供数据,请查看reproducible example。所以我没有尝试使用你的数据,只会给你未经测试的代码。

在ggplot中,最好是你的数据是长格式的,这里我提供了一个例子,其中多年的行是重复的数据,并且有一个列给出了物种属性。

SqlaTable

现在这不能解决你的问题,登陆的规模也不一样。

你可以获得两个不同尺度的不同情节:

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"))

答案 1 :(得分:0)

经过一些思考,我认为塞德里克提出的可能就是你正在寻找的东西,一个带有自由y轴的刻面图。通过这样做,您可以看到不同物种的趋势。 PoGibas还提供了一种组织数据框架的好方法,这种方法比您当前组织数据框架更常见。

在这里,我将提供我的方法。我想向您展示如何将宽格式数据框combined.landings转换为长格式并用于绘图。

# 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))

看看combined.landings2。这是适合在ggplot2中绘图的格式。

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

现在我们可以绘制小平面图。 ~Species表示我们希望分面基于Species列。 scales = "free_y"是必要的,否则y轴将被修复。

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

enter image description here