我正在尝试使用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
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")
#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
p <- p + geom_line(data = cod.landings, aes(year, cod_catch), colour =
"red")
p
上面的代码中是否有我做错的事情?或者使用不同的方法生成所需的图形?我在其他地方发现了一个类似的问题,但解决方案涉及将数据写入一个新的数据帧,我宁愿避免,因为每个物种需要重写65个观测值。
谢谢
答案 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")