简体   繁体   English

用多行突出显示ggplot中的一行

[英]Highlight a line in ggplot with multiple lines

I want to change the size , linetype , color etc. for one line in ggplot.我想改变sizelinetypecolor等,在ggplot一行。 Here is a minimal reproducible example:这是一个最小的可重现示例:

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() 

Output:输出: 输出

How can I change the size , linetype , color of Country1 , without having to plot every line separately, like: geom_line(aes( y = Country1...)) + geom_line(aes(y = Country2...)) , and therefore highlight the line of Country1 ?如何更改Country1sizelinetypecolor ,而不必单独绘制每一行,例如: geom_line(aes( y = Country1...)) + geom_line(aes(y = Country2...)) ,以及因此突出显示Country1的线?

Thanks a lot in advance!非常感谢!

Not every line but you can plot only 'Country1' separately :不是每一行,但你只能分别绘制'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() 

在此处输入图片说明

One approach to achieve this is to make use of named vectors for color , size , .. which you can then use inside scale_xxxx_manual to set the values as you like.实现此目的的一种方法是使用colorsize 、.. 的命名向量,然后您可以在scale_xxxx_manual使用scale_xxxx_manualscale_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

Following this duplicate here is another answer to this question.此重复之后是此问题的另一个答案。
It uses a simple trick, to tell the highlighted variable by comparing it with the target value.它使用一个简单的技巧,通过将突出显示的变量与目标值进行比较来告诉它。 This dichotomyzes it, becoming a logical FALSE/TRUE value.这将其二分,成为逻辑FALSE/TRUE值。

variable == "Country1"

The plot legend now needs more care to be taken, in order to have its title and text right.情节图例现在需要更加小心,以使其标题和文本正确。

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

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM