【问题标题】:Months with year for each bar in Dual Y axis plot: geom_bar, geom_line双 Y 轴图中每个条的月份和年份:geom_bar、geom_line
【发布时间】:2021-08-27 04:08:28
【问题描述】:

我的数据框中有一个日期变量和另外两个变量。我希望创建一个带有两个变量的双 Y 轴图,一个带有条形图,一个带有线形图。我已经成功地做到了。 还有一些问题:

  1. 我没有得到每个条的月份和年份。我只得到一些月份的名称。我希望每个条形下方都有 11 月 20 日、12 月 20 日、1 月 21 日等。
  2. 轴标题不在轴的中间。
  3. 图例未显示。 对上述 3 个问题的任何帮助表示赞赏。 这是我的代码:

# Libraries
library(ggplot2)
library(dplyr)
library(hrbrthemes)

# Build dummy data
data <- data.frame(
  day = as.Date(c("2020-11-01", "2020-12-01", "2021-01-01", "2021-02-01",
                  "2021-03-01", "2021-04-01", "2021-05-01")),
  var1 = runif(7, 150, 200),
  var2 = runif(7, 6, 20)
)

# Value used to transform the data
coeff <- max(data$var1)/max(data$var2)

# A few constants
var1Color <- "#69b3a2"
var2Color <- rgb(0.2, 0.6, 0.9, 1)

p <- ggplot(data, aes(x=day)) +
  
  geom_bar( aes(y=var1), stat="identity", size=.1, 
            fill=var1Color, color="black", alpha=.4, width = 7) + 
  
  geom_line( aes(y=var2 * coeff), size=2, color = var2Color) +
  
  scale_y_continuous(
    
    # Features of the first axis
    name = "Variable 1",
    
    # Add a second axis and specify its features
    sec.axis = sec_axis(~./coeff, name ="Variable 2")
  ) + 
  
  theme_ipsum() +
  
  theme(
    axis.title.y = element_text(color = var1Color, size=13),
    axis.title.y.right = element_text(color = var2Color, size=13)
  ) +
  
  xlab("Month")

p

这是我得到的情节。

Dual Y-axis Plot

【问题讨论】:

    标签: r ggplot2 geom-bar


    【解决方案1】:

    您的第一个问题可以通过以下方式解决:

    library(lubridate)
    
    p + scale_x_date(date_labels = "%b-%d", breaks = seq(as.Date(min(data$day)), as.Date(max(data$day)), by = "month"))
    

    在不使用 theme_ipsum 的情况下运行您的代码时,我没有出现问题 2(见图)。

    更新:

    要添加包含所需内容的图例,您必须将 fill = var1Colorcolor = var2Color 定义为 aes 的参数(以生成图例条目)以及使用 scale_fill_manual()scale_color_manual() 来使用您的定义颜色:

      geom_bar(aes(y = var1, fill = var1Color), stat = "identity", size = .1, 
                 color = "black", alpha = .4, width = 7) + 
      geom_line(aes(y = var2 * coeff, color = var2Color), size = 2) +
      scale_fill_manual(values = var1Color) +
      scale_color_manual(values = var2Color) 
    

    【讨论】:

    • 感谢您的意见。我希望得到两种情节类型的形状和颜色的传奇。
    • 修改了我的答案以显示您想要的图例。
    猜你喜欢
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2021-07-24
    相关资源
    最近更新 更多