R 如何在ggplot中的月/年数据上显示十年趋势

R 如何在ggplot中的月/年数据上显示十年趋势,r,ggplot2,tidyverse,R,Ggplot2,Tidyverse,我试图用ggplot重现下图,但我遇到了一些概念问题,希望有人能帮我解决?这是我正在重新创建的初始情节: 这是我用同样的数据绘制的图: 这是我用来生成它的代码: fig6 <- ggplot(PS78_89, aes(x = YearMonth, y= OrcaDays)) + geom_col(position = "dodge", fill = "#ffc300") + geom_line(aes(y = DecMean), s

我试图用ggplot重现下图,但我遇到了一些概念问题,希望有人能帮我解决?这是我正在重新创建的初始情节:

这是我用同样的数据绘制的图:

这是我用来生成它的代码:

fig6 <- ggplot(PS78_89, aes(x = YearMonth, y= OrcaDays)) +
    geom_col(position = "dodge", fill = "#ffc300") +
    geom_line(aes(y = DecMean), size=0.75, color = "#333533",
              position = position_dodge2(width = 0.9)) +
    labs(y="No. of Days/Month", x = "Months of Each Year") +
    scale_y_continuous(expand = expansion(mult = c(0.003, .1))) +
    theme_bw() +
    theme(panel.grid.major.y = element_line(color = "darkgray"),
          panel.grid.major.x = element_line(colour = "lightgray"),
          panel.grid.minor = element_blank(),
          panel.background = element_rect(fill = alpha("lightgray", alpha = 0.40)),
          axis.line = element_line(color = "#3c4245"),
          axis.title = element_text(size = 18, face = "bold", colour = "#3c4245"),
          axis.title.y = element_text(margin = margin(r=7, unit = "pt")),
          axis.title.x = element_text(margin = margin(t=7, unit = "pt")),
          axis.text.x = element_text(size = 8, face = "bold", angle = 45, hjust = 1),
          axis.text.y = element_text(size = 12, face = "bold"),
          legend.title = element_blank(),
          legend.text = element_text(size=18, face = "bold", margin = margin(l = 3), hjust = 0),
          legend.key.size = unit(2,"line"),
          plot.title = element_text(face = "bold", colour = "#3c4245", hjust = 0.5, size = 28, margin = margin(b=10, unit = "pt")),
          plot.caption = element_text(face = "italic", colour = "#3c4245", size = 20, margin = margin(t = 5), hjust = 0, vjust = 0.5))
fig6
这是df的dput():

> dput(PS78_89)
structure(list(Decade = c("1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
"1978-1989", "1978-1989", "1978-1989", "1978-1989"), YearMonth = c("1978-01", 
"1978-02", "1978-03", "1978-04", "1978-05", "1978-06", "1978-07", 
"1978-08", "1978-09", "1978-10", "1978-11", "1978-12", "1979-01", 
"1979-02", "1979-03", "1979-04", "1979-05", "1979-06", "1979-07", 
"1979-08", "1979-09", "1979-10", "1979-11", "1979-12", "1980-01", 
"1980-02", "1980-03", "1980-04", "1980-05", "1980-06", "1980-07", 
"1980-08", "1980-09", "1980-10", "1980-11", "1980-12", "1981-01", 
"1981-02", "1981-03", "1981-04", "1981-05", "1981-06", "1981-07", 
"1981-08", "1981-09", "1981-10", "1981-11", "1981-12", "1982-01", 
"1982-02", "1982-03", "1982-04", "1982-05", "1982-07", "1982-08", 
"1982-09", "1982-10", "1982-11", "1982-12", "1983-01", "1983-02", 
"1983-03", "1983-04", "1983-05", "1983-06", "1983-07", "1983-08", 
"1983-09", "1983-10", "1983-11", "1983-12", "1984-01", "1984-02", 
"1984-03", "1984-04", "1984-06", "1984-07", "1984-09", "1984-10", 
"1984-11", "1985-01", "1985-02", "1985-03", "1985-04", "1985-05", 
"1985-07", "1985-08", "1985-10", "1985-11", "1985-12", "1986-01", 
"1986-03", "1986-04", "1986-08", "1986-09", "1986-10", "1986-11", 
"1986-12", "1987-01", "1987-02", "1987-03", "1987-04", "1987-06", 
"1987-07", "1987-08", "1987-10", "1987-12", "1988-01", "1988-02", 
"1988-03", "1988-04", "1988-05", "1988-07", "1988-08", "1988-09", 
"1988-11", "1989-01", "1989-02", "1989-03", "1989-04", "1989-05", 
"1989-07", "1989-08", "1989-09", "1989-10", "1989-11", "1989-12"
), Month = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 
4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 
7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 
2, 3, 4, 6, 7, 9, 10, 11, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 1, 
3, 4, 8, 9, 10, 11, 12, 1, 2, 3, 4, 6, 7, 8, 10, 12, 1, 2, 3, 
4, 5, 7, 8, 9, 11, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12), OrcaDays = c(2L, 
5L, 3L, 1L, 3L, 4L, 9L, 17L, 6L, 8L, 4L, 2L, 1L, 18L, 5L, 6L, 
1L, 1L, 6L, 9L, 4L, 6L, 3L, 2L, 1L, 2L, 1L, 4L, 1L, 1L, 5L, 4L, 
7L, 13L, 6L, 4L, 4L, 1L, 1L, 2L, 4L, 3L, 7L, 10L, 8L, 4L, 3L, 
1L, 7L, 4L, 2L, 3L, 3L, 3L, 5L, 7L, 1L, 9L, 6L, 4L, 3L, 1L, 5L, 
2L, 3L, 6L, 6L, 3L, 3L, 4L, 1L, 6L, 1L, 6L, 3L, 2L, 4L, 1L, 3L, 
3L, 2L, 3L, 2L, 5L, 1L, 5L, 6L, 3L, 1L, 4L, 1L, 3L, 1L, 5L, 1L, 
2L, 4L, 6L, 3L, 1L, 1L, 3L, 1L, 5L, 1L, 6L, 7L, 7L, 1L, 8L, 2L, 
1L, 2L, 1L, 3L, 1L, 6L, 4L, 1L, 3L, 3L, 2L, 6L, 1L, 9L, 2L, 6L
), DecMean = c(3.66666666666667, 3.90909090909091, 2.83333333333333, 
3.16666666666667, 2.11111111111111, 2.14285714285714, 4.90909090909091, 
6.36363636363636, 4.1, 5.27272727272727, 3.63636363636364, 3.9, 
3.66666666666667, 3.90909090909091, 2.83333333333333, 3.16666666666667, 
2.11111111111111, 2.14285714285714, 4.90909090909091, 6.36363636363636, 
4.1, 5.27272727272727, 3.63636363636364, 3.9, 3.66666666666667, 
3.90909090909091, 2.83333333333333, 3.16666666666667, 2.11111111111111, 
2.14285714285714, 4.90909090909091, 6.36363636363636, 4.1, 5.27272727272727, 
3.63636363636364, 3.9, 3.66666666666667, 3.90909090909091, 2.83333333333333, 
3.16666666666667, 2.11111111111111, 2.14285714285714, 4.90909090909091, 
6.36363636363636, 4.1, 5.27272727272727, 3.63636363636364, 3.9, 
3.66666666666667, 3.90909090909091, 2.83333333333333, 3.16666666666667, 
2.11111111111111, 4.90909090909091, 6.36363636363636, 4.1, 5.27272727272727, 
3.63636363636364, 3.9, 3.66666666666667, 3.90909090909091, 2.83333333333333, 
3.16666666666667, 2.11111111111111, 2.14285714285714, 4.90909090909091, 
6.36363636363636, 4.1, 5.27272727272727, 3.63636363636364, 3.9, 
3.66666666666667, 3.90909090909091, 2.83333333333333, 3.16666666666667, 
2.14285714285714, 4.90909090909091, 4.1, 5.27272727272727, 3.63636363636364, 
3.66666666666667, 3.90909090909091, 2.83333333333333, 3.16666666666667, 
2.11111111111111, 4.90909090909091, 6.36363636363636, 5.27272727272727, 
3.63636363636364, 3.9, 3.66666666666667, 2.83333333333333, 3.16666666666667, 
6.36363636363636, 4.1, 5.27272727272727, 3.63636363636364, 3.9, 
3.66666666666667, 3.90909090909091, 2.83333333333333, 3.16666666666667, 
2.14285714285714, 4.90909090909091, 6.36363636363636, 5.27272727272727, 
3.9, 3.66666666666667, 3.90909090909091, 2.83333333333333, 3.16666666666667, 
2.11111111111111, 4.90909090909091, 6.36363636363636, 4.1, 3.63636363636364, 
3.66666666666667, 3.90909090909091, 2.83333333333333, 3.16666666666667, 
2.11111111111111, 4.90909090909091, 6.36363636363636, 4.1, 5.27272727272727, 
3.63636363636364, 3.9)), row.names = c(NA, -127L), groups = structure(list(
    Decade = c("1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989", "1978-1989", "1978-1989", 
    "1978-1989", "1978-1989", "1978-1989"), YearMonth = c("1978-01", 
    "1978-02", "1978-03", "1978-04", "1978-05", "1978-06", "1978-07", 
    "1978-08", "1978-09", "1978-10", "1978-11", "1978-12", "1979-01", 
    "1979-02", "1979-03", "1979-04", "1979-05", "1979-06", "1979-07", 
    "1979-08", "1979-09", "1979-10", "1979-11", "1979-12", "1980-01", 
    "1980-02", "1980-03", "1980-04", "1980-05", "1980-06", "1980-07", 
    "1980-08", "1980-09", "1980-10", "1980-11", "1980-12", "1981-01", 
    "1981-02", "1981-03", "1981-04", "1981-05", "1981-06", "1981-07", 
    "1981-08", "1981-09", "1981-10", "1981-11", "1981-12", "1982-01", 
    "1982-02", "1982-03", "1982-04", "1982-05", "1982-07", "1982-08", 
    "1982-09", "1982-10", "1982-11", "1982-12", "1983-01", "1983-02", 
    "1983-03", "1983-04", "1983-05", "1983-06", "1983-07", "1983-08", 
    "1983-09", "1983-10", "1983-11", "1983-12", "1984-01", "1984-02", 
    "1984-03", "1984-04", "1984-06", "1984-07", "1984-09", "1984-10", 
    "1984-11", "1985-01", "1985-02", "1985-03", "1985-04", "1985-05", 
    "1985-07", "1985-08", "1985-10", "1985-11", "1985-12", "1986-01", 
    "1986-03", "1986-04", "1986-08", "1986-09", "1986-10", "1986-11", 
    "1986-12", "1987-01", "1987-02", "1987-03", "1987-04", "1987-06", 
    "1987-07", "1987-08", "1987-10", "1987-12", "1988-01", "1988-02", 
    "1988-03", "1988-04", "1988-05", "1988-07", "1988-08", "1988-09", 
    "1988-11", "1989-01", "1989-02", "1989-03", "1989-04", "1989-05", 
    "1989-07", "1989-08", "1989-09", "1989-10", "1989-11", "1989-12"
    ), .rows = structure(list(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
        9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 
        20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 
        31L, 32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L, 
        42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L, 51L, 52L, 
        53L, 54L, 55L, 56L, 57L, 58L, 59L, 60L, 61L, 62L, 63L, 
        64L, 65L, 66L, 67L, 68L, 69L, 70L, 71L, 72L, 73L, 74L, 
        75L, 76L, 77L, 78L, 79L, 80L, 81L, 82L, 83L, 84L, 85L, 
        86L, 87L, 88L, 89L, 90L, 91L, 92L, 93L, 94L, 95L, 96L, 
        97L, 98L, 99L, 100L, 101L, 102L, 103L, 104L, 105L, 106L, 
        107L, 108L, 109L, 110L, 111L, 112L, 113L, 114L, 115L, 
        116L, 117L, 118L, 119L, 120L, 121L, 122L, 123L, 124L, 
        125L, 126L, 127L), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), row.names = c(NA, -127L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))
我还希望能够控制x轴是如何被标记的,这样它就不会像上面的原始图形那样被破坏

我知道我被这个任务搞糊涂了,所以如果我的帖子不太清楚,我很抱歉,但是请告诉我如何修改我的问题,使它更容易理解


非常感谢您抽出时间

这里有一个解决方案。将
group=1
添加到您的
geom_line()
的美学中。我不知道这到底是为什么,但是当你得到这个错误时,只需在美学中创建一个虚拟组,这样所有数据都在同一个组中

ggplot(PS78_89, aes(x = YearMonth)) +
  geom_col(aes(y= OrcaDays), position = "dodge", fill = "#ffc300") +
  geom_line(aes(y = DecMean, group = 1), size=0.75, color = "#333533",
            position = position_dodge2(width = 0.9)) +
  labs(y="No. of Days/Month", x = "Months of Each Year") +
  scale_y_continuous(expand = expansion(mult = c(0.003, .1))) +
  theme_bw() +
  theme(panel.grid.major.y = element_line(color = "darkgray"),
        panel.grid.major.x = element_line(colour = "lightgray"),
        panel.grid.minor = element_blank(),
        panel.background = element_rect(fill = alpha("lightgray", alpha = 0.40)),
        axis.line = element_line(color = "#3c4245"),
        axis.title = element_text(size = 18, face = "bold", colour = "#3c4245"),
        axis.title.y = element_text(margin = margin(r=7, unit = "pt")),
        axis.title.x = element_text(margin = margin(t=7, unit = "pt")),
        axis.text.x = element_text(size = 8, face = "bold", angle = 45, hjust = 1),
        axis.text.y = element_text(size = 12, face = "bold"),
        legend.title = element_blank(),
        legend.text = element_text(size=18, face = "bold", margin = margin(l = 3), hjust = 0),
        legend.key.size = unit(2,"line"),
        plot.title = element_text(face = "bold", colour = "#3c4245", hjust = 0.5, size = 28, margin = margin(b=10, unit = "pt")),
        plot.caption = element_text(face = "italic", colour = "#3c4245", size = 20, margin = margin(t = 5), hjust = 0, vjust = 0.5))

未测试,但您可能希望执行类似于
geom_线(aes(y=DecMean)…
的操作,因为您希望
DecMean
列绘制在y轴上。错误是因为您建议将
DecMean
的每个值映射到特定颜色。每个颜色组只有一个值,因此每个组只包含一个观察值Ooh感谢@CalumYou的建议!我刚试过,但仍然得到相同的错误
每组只包含一个观察结果…
@CalumYou我刚用
geom_point()
试过,点会显示出来,但只要我尝试用一条线连接它们,它就会返回到相同的
每组…
错误
ggplot(PS78_89, aes(x = YearMonth)) +
  geom_col(aes(y= OrcaDays), position = "dodge", fill = "#ffc300") +
  geom_line(aes(y = DecMean, group = 1), size=0.75, color = "#333533",
            position = position_dodge2(width = 0.9)) +
  labs(y="No. of Days/Month", x = "Months of Each Year") +
  scale_y_continuous(expand = expansion(mult = c(0.003, .1))) +
  theme_bw() +
  theme(panel.grid.major.y = element_line(color = "darkgray"),
        panel.grid.major.x = element_line(colour = "lightgray"),
        panel.grid.minor = element_blank(),
        panel.background = element_rect(fill = alpha("lightgray", alpha = 0.40)),
        axis.line = element_line(color = "#3c4245"),
        axis.title = element_text(size = 18, face = "bold", colour = "#3c4245"),
        axis.title.y = element_text(margin = margin(r=7, unit = "pt")),
        axis.title.x = element_text(margin = margin(t=7, unit = "pt")),
        axis.text.x = element_text(size = 8, face = "bold", angle = 45, hjust = 1),
        axis.text.y = element_text(size = 12, face = "bold"),
        legend.title = element_blank(),
        legend.text = element_text(size=18, face = "bold", margin = margin(l = 3), hjust = 0),
        legend.key.size = unit(2,"line"),
        plot.title = element_text(face = "bold", colour = "#3c4245", hjust = 0.5, size = 28, margin = margin(b=10, unit = "pt")),
        plot.caption = element_text(face = "italic", colour = "#3c4245", size = 20, margin = margin(t = 5), hjust = 0, vjust = 0.5))