【问题标题】:TropFishR plot.lfq function limiting, how to produce a similar graph in ggplot2TropFishR plot.lfq 函数限制,如何在 ggplot2 中生成类似的图形
【发布时间】: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 结合使用?

标签: r ggplot2


【解决方案1】:

我通过完全绕过 TropFishR 包解决了这个问题,我使用来自 my other question 的代码计算了长度频率,将其放入函数中并通过 dlply 运行以获取每个时间段的 LF 表,这很容易转换为数据框并使用 geom_bar 以所需的任何样式进行绘制。

【讨论】:

    猜你喜欢
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多