【发布时间】:2019-08-02 18:24:43
【问题描述】:
我正在尝试使用 TropFishR 包绘制渔业长度频率数据的时间序列,这很棒,但它没有提供太多自定义实际绘图的选项。
例如,我想查看每两周一次的数据,该功能的默认设置是按月聚合,我手动将我的数据聚合到包的 R 文档建议的所需时间段;但是,一旦绘制完所有内容,轴刻度上的标签只会显示其中一个周期,而不是两个周期。
第一期 01-2 月的标签;每个月显示 01-Mar 等,但第二个周期为 15-Feb; 3 月 15 日不是。像这样:
我还想标准化 y 轴,因为我将有大约四个这样的图表,并且长度不同(男性和女性)。我对 ylim 的尝试失败了,因为产生了以下结果:
这个包的转换产生列表,这是我目前使用的代码:
require(TropFishR)
data$Period<-as.Date(data$Period)
LF_graph <- lfqCreate(data, Lname = "Length", Dname = "Period",
aggregate_dates = FALSE, species="hake",
length_unit = "cm", bin_size = 1, plot=FALSE)
lw<-lfqModify(LF_graph, bin_size=1)
lw_f<-lfqRestructure(lw,MA=3,addl.sqrt = FALSE)
prop.table(lw_f$catch, margin=2)*100
lw_f$catch<-prop.table(lw_f$catch, margin=2)*100
plot(lw_f, Fname = "catch", date.axis = "modern", date.format="%d-%b",
ylim=c(10,35), xlim=range(lw_f$dates)+c(-15,+15),
hist.sc=0.95, image.col=NA, ylab="Length classes (cm)")
这是输出,我打电话给dput((head(lw_f,5)),因为我怕20太长了
list(species = "hake", stock = NA, dates = structure(c(17928,
17942, 17956, 17970, 17987, 18001, 18017), class = "Date"), midLengths = c(8.5,
9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5,
20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5), catch = structure(c(0.104712041884817,
0.104712041884817, 0.942408376963351, 2.19895287958115, 4.18848167539267,
3.87434554973822, 2.72251308900524, 1.8848167539267, 1.04712041884817,
0.628272251308901, 0.104712041884817, 0.209424083769634, 1.04712041884817,
7.32984293193717, 19.8952879581152, 27.0157068062827, 18.5340314136126,
7.12041884816754, 0.837696335078534, 0.104712041884817, 0.104712041884817,
0, 0.117096018735363, 0.117096018735363, 0, 0.234192037470726,
0.936768149882904, 1.63934426229508, 1.87353629976581, 1.28805620608899,
1.28805620608899, 0.117096018735363, 0, 0.468384074941452, 5.62060889929742,
20.1405152224824, 36.4168618266979, 21.7798594847775, 7.02576112412178,
0.936768149882904, 0, 0, 0, 0, 0, 1.06382978723404, 6.38297872340426,
8.51063829787234, 10.6382978723404, 22.3404255319149, 8.51063829787234,
12.7659574468085, 11.7021276595745, 6.38297872340426, 2.12765957446809,
3.19148936170213, 0, 0, 4.25531914893617, 2.12765957446809, 0,
0, 0, 0, 0.162337662337662, 0.162337662337662, 1.46103896103896,
1.78571428571429, 4.22077922077922, 6.00649350649351, 8.6038961038961,
11.6883116883117, 10.5519480519481, 8.44155844155844, 6.49350649350649,
1.2987012987013, 0.649350649350649, 0.162337662337662, 1.13636363636364,
7.95454545454545, 16.3961038961039, 8.92857142857143, 2.92207792207792,
0.974025974025974, 0, 0, 4, 0, 8, 0, 0, 8, 8, 24, 20, 8, 12,
8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 66.6666666666667, 33.3333333333333, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 4.76190476190476, 9.52380952380952,
4.76190476190476, 4.76190476190476, 4.76190476190476, 14.2857142857143,
23.8095238095238, 28.5714285714286, 4.76190476190476), .Dim = c(21L,
7L)))
我一直无法找到使用 TropFishR 包进行这种级别定制的方法,有没有办法使用另一个包(例如 ggplot2)重现此图,但也许可以使用来自 TropFishR 包的转换数据?
谢谢!
【问题讨论】:
-
这在 ggplot 中看起来非常可行。我要么使用
geom_rect,要么每两周制作一个方面,然后使用geom_col加上coord_flip。您能否在问题的文本中分享dput(lw_f)的输出(或dput(head(lw_f,20)),如果它太多了),以便我们更好地了解您的数据是什么样的? -
谢谢!我已经添加了输出,我有点不确定如何将列表与 ggplot2 结合使用?