如何排序因子水平

问题描述 投票:0回答:1

我在沿 x 轴组织关卡时遇到问题。由于某种原因,我的几周完全乱了套,尽管我相信水平是正确的。我想要沿着我的 X 轴有第 1 周到第 52 周,但经过几个小时的尝试后我无法弄清楚。有人可以解释一下吗?

winter_fl <- structure(list(IDWeek = c(1, 2, 2, 3, 3, 4, 5, 5, 6, 7, 8, 9, 
10, 11, 12, 13, 13, 14, 14, 16, 16, 17, 17, 18, 18, 28, 28, 29, 
30, 30, 31, 31, 32, 33, 34, 35, 35, 36, 36, 37, 37, 38, 39, 40, 
41, 42, 43, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 52), race = c("W", 
"W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", 
"W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", 
"W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", 
"W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", 
"W", "W", "W", "W", "W"), z = c("Weekly Median FL", "Estimated Fish Passage", 
"Weekly Median FL", "Estimated Fish Passage", "Weekly Median FL", 
"Weekly Median FL", "Estimated Fish Passage", "Weekly Median FL", 
"Weekly Median FL", "Weekly Median FL", "Weekly Median FL", "Weekly Median FL", 
"Weekly Median FL", "Weekly Median FL", "Weekly Median FL", "Estimated Fish Passage", 
"Weekly Median FL", "Estimated Fish Passage", "Weekly Median FL", 
"Estimated Fish Passage", "Weekly Median FL", "Estimated Fish Passage", 
"Weekly Median FL", "Estimated Fish Passage", "Weekly Median FL", 
"Estimated Fish Passage", "Weekly Median FL", "Weekly Median FL", 
"Estimated Fish Passage", "Weekly Median FL", "Estimated Fish Passage", 
"Weekly Median FL", "Weekly Median FL", "Weekly Median FL", "Weekly Median FL", 
"Estimated Fish Passage", "Weekly Median FL", "Estimated Fish Passage", 
"Weekly Median FL", "Estimated Fish Passage", "Weekly Median FL", 
"Weekly Median FL", "Weekly Median FL", "Weekly Median FL", "Weekly Median FL", 
"Weekly Median FL", "Estimated Fish Passage", "Weekly Median FL", 
"Weekly Median FL", "Estimated Fish Passage", "Weekly Median FL", 
"Weekly Median FL", "Weekly Median FL", "Weekly Median FL", "Weekly Median FL", 
"Weekly Median FL", "Weekly Median FL", "Weekly Median FL"), 
    ForkLength_Catch = c(156, 1704, 825, 998, 589, 424, 332, 
    910, 273, 589, 998, 863, 1645, 2769, 739, 112, 1927, 322, 
    3088, 138, 116, 238, 741, 129, 327, 267, 211, 535, 157, 723, 
    154, 2868, 4944, 1025, 4932, 4005, 7979, 8016, 10644, 30035, 
    12230, 11128, 17513, 22107, 32614, 30997, 82256, 27013, 9993, 
    17056, 30856, 32796, 21939, 25576, 5178, 3686, 1983, 1271
    )), class = "data.frame", row.names = c(NA, -58L))


a <-  ggplot(data = filter(winter_fl, z == 'Estimated Fish Passage'),aes(x= factor(IDWeek, levels = c(1:52)), y = ForkLength_Catch), fill= z) +   
geom_bar(stat='summary', fun= sum, show.legend=FALSE, fill= 'lightpink2',color='black') + ylab("Median ForkLength (mm)    and     Estimated Fish Passage") + xlab("Week")  + 
scale_y_continuous(labels=comma)  + scale_x_discrete(breaks=seq(1,52,1)) +

geom_boxplot(data = filter(winter_fl, z == 'Weekly Median FL'), aes(x= factor(IDWeek, levels = c(1:52)), y = ForkLength_Catch), width=0.5, fill = 'goldenrod', outlier.colour = 'pink') + 
 facet_wrap(race ~ z, ncol = 1, strip.position ="top", scales="free_y")  + theme_bw(base_size = 9)  +  theme(strip.text=element_text(size=7,margin=margin()), strip.background=element_rect(colour="azure",fill="#f0f0f0")) #+ scale_x_discrete(breaks=seq(1,52,1)) 

请参阅下面的屏幕截图。我的一周不是从 1 点到 52 点安排的。

r ggplot2 tidyverse
1个回答
0
投票

使用

scale_x_discrete(drop = FALSE)
防止未使用的
factor
级别被丢弃:

library(ggplot2)
library(scales)

winter_fl$IDWeek <- factor(winter_fl$IDWeek)

ggplot(
  data = subset(winter_fl, z == "Estimated Fish Passage"),
  aes(x = IDWeek, y = ForkLength_Catch, fill = z)
) +
  geom_bar(
    stat = "summary", fun = sum, show.legend = FALSE,
    fill = "lightpink2", color = "black"
  ) +
  ylab("Median ForkLength (mm)    and     Estimated Fish Passage") +
  xlab("Week") +
  scale_y_continuous(labels = comma) +
  scale_x_discrete(drop = FALSE) +
  geom_boxplot(
    data = subset(winter_fl, z == "Weekly Median FL"),
    aes(x = IDWeek, y = ForkLength_Catch),
    width = 0.5, fill = "goldenrod", outlier.colour = "pink"
  ) +
  facet_wrap(race ~ z,
    ncol = 1,
    strip.position = "top", scales = "free_y"
  ) +
  theme_bw(base_size = 9) +
  theme(
    strip.text = element_text(size = 7, margin = margin()),
    strip.background = element_rect(colour = "azure", fill = "#f0f0f0")
  )

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.