【问题标题】:Highlight a line in ggplot with multiple lines用多行突出显示ggplot中的一行
【发布时间】:2021-01-17 21:44:27
【问题描述】:

我想为 ggplot 中的一行更改sizelinetypecolor 等。 这是一个最小的可重现示例:

library(tidyverse)    
# Data in wide format
    df_wide <- data.frame(
    Horizons = seq(1,10,1),
    Country1 = c(2.5, 2.3, 2.2, 2.2, 2.1, 2.0, 1.7, 1.8, 1.7, 1.6),
    Country2 = c(3.5, 3.3, 3.2, 3.2, 3.1, 3.0, 3.7, 3.8, 3.7, 3.6),
    Country3 = c(1.5, 1.3, 1.2, 1.2, 1.1, 1.0, 0.7, 0.8, 0.7, 0.6)
    )
    
# Convert to long format
    df_long <- df_wide %>%
      gather(key = "variable", value = "value", -Horizons)
    
# Plot the lines
plotstov <- ggplot(df_long, aes(x = Horizons, y = value)) + 
  geom_line(aes(colour = variable, group = variable))+
  theme_bw() 

输出:

如何更改Country1sizelinetypecolor,而不必绘制每一行 分别,例如:geom_line(aes( y = Country1...)) + geom_line(aes(y = Country2...)),因此突出显示Country1?

提前非常感谢!

【问题讨论】:

  • 你可以应用相同的逻辑看到here

标签: r ggplot2 highlight


【解决方案1】:

不是每一行,但您只能单独绘制'Country1'

library(ggplot2)

ggplot(subset(df_long, variable != 'Country1'), aes(x = Horizons, y = value)) + 
  geom_line(aes(colour = variable, group = variable)) +
  geom_line(data = subset(df_long, variable == 'Country1'), 
            size = 3, linetype = 'dashed', color = 'blue') +
  theme_bw() 

【讨论】:

    【解决方案2】:

    实现此目的的一种方法是使用 colorsize、.. 的命名向量,然后您可以在 scale_xxxx_manual 中使用它们来设置您喜欢的值。

    library(tidyverse)    
    # Data in wide format
    df_wide <- data.frame(
      Horizons = seq(1,10,1),
      Country1 = c(2.5, 2.3, 2.2, 2.2, 2.1, 2.0, 1.7, 1.8, 1.7, 1.6),
      Country2 = c(3.5, 3.3, 3.2, 3.2, 3.1, 3.0, 3.7, 3.8, 3.7, 3.6),
      Country3 = c(1.5, 1.3, 1.2, 1.2, 1.1, 1.0, 0.7, 0.8, 0.7, 0.6)
    )
    
    # Convert to long format
    df_long <- df_wide %>%
      gather(key = "variable", value = "value", -Horizons)
    
    colors <- c(Country1 = "red", Country2 = "grey50", Country3 = "grey50")
    sizes <- c(Country1 = 2, Country2 = .5, Country3 = .5)
    # Plot the lines
    plotstov <- ggplot(df_long, aes(x = Horizons, y = value)) + 
      geom_line(aes(colour = variable, size = variable, group = variable)) +
      scale_color_manual(values = colors) +
      scale_size_manual(values = sizes) +
      theme_bw()
    plotstov
    

    【讨论】:

      【解决方案3】:

      this duplicate 之后,这是此问题的另一个答案。
      它使用一个简单的技巧,通过将突出显示的变量与目标值进行比较来告诉它。这将其二分法,成为一个合乎逻辑的FALSE/TRUE 值。

      variable == "Country1"
      

      情节图例现在需要更加小心,以使其标题和文本正确。

      g <- ggplot(df_long, aes(x = Horizons, y = value)) + 
        geom_line(aes(colour = variable == "Country1", size = variable == "Country1", group = variable)) +
        scale_color_manual(name = "variable", labels = c("Other", "Country1"), values = c("grey50", "red")) +
        scale_size_manual(name = "variable", labels = c("Other", "Country1"), values = c(0.5, 2)) +
        theme_bw()
      
      g
      

      【讨论】:

        猜你喜欢
        • 2021-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多