【问题标题】:ggplot2 - highlight specific valuesggplot2 - 突出显示特定值
【发布时间】:2014-12-15 08:21:52
【问题描述】:

我有一个产品数据框和生产它们的时间(天):

test <- structure(list(product = c("prod.1", "prod.2", "prod.3", "prod.4", "prod.5",
"prod.6", "prod.7", "prod.8", "prod.9", "prod.10", "prod.11", "prod.12", "prod.13", 
"prod.14", "prod.15", "prod.16", "prod.17", "prod.18", "prod.19", "prod.20", "prod.21", 
"prod.22", "prod.23", "prod.24", "prod.25", "prod.26", "prod.27", "prod.28", "prod.29", 
"prod.30", "prod.31", "prod.32", "prod.33", "prod.34", "prod.35", "prod.36", "prod.37", 
"prod.38", "prod.39", "prod.40", "prod.41", "prod.42", "prod.43", "prod.44", "prod.45", 
"prod.46", "prod.47", "prod.48", "prod.49", "prod.50"), prodTime = c(4.03, 3.8, 3.75, 
3.74, 3.72, 3.7, 3.66, 3.66, 3.66, 3.64, 3.63, 3.63, 3.63, 3.6, 3.6, 3.58, 3.58, 3.58, 
3.57, 3.57, 3.57, 3.56, 3.56, 3.56, 3.56, 3.55, 3.53, 3.53, 3.53, 3.53, 3.53, 3.52, 3.51, 
3.51, 3.51, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.49, 3.49, 3.48, 3.48, 3.48, 3.48, 
3.47)), .Names = c("product", "prodTime"), row.names = c(NA, -50L), class = 
c("data.frame"))

并且可以毫无问题地输出一个几乎如我所愿的情节:

ggplot(data=test, aes(x=prodTime, y=reorder(factor(product), prodTime))) +
  geom_segment(aes(yend=product, xend=0)) + 
  geom_point() + 
  coord_cartesian(xlim=c(2.5, 4.25)) + 
  theme_minimal() + 
  theme(panel.grid.major.y=element_blank(), 
        axis.ticks=element_blank()) + 
  labs(x='', y='') + 
  geom_vline(aes(xintercept=3.7), color = 'red', linetype = 'dashed') +
  geom_vline(aes(xintercept=3.3), color = 'blue', linetype = 'dashed')

但是,我想要得到的是一个类似的图,其中所有产品标签(prod.01 到 prod.50)、段和点都是浅灰色的,但其中一些会突出显示(例如,在不同的颜色)。假设 prod.03、prod.12、prod.29、prod.41 是唯一要突出显示的(标签、段和点)。

欢迎提出任何建议。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    向您的数据框中添加新列,其中产品分为两组(应突出显示或不显示)。

    test$high<-ifelse(test$product %in% c("prod.3", "prod.12", "prod.29", "prod.41"),"Yes","No")
    

    然后在aes()ggplot() 中为color= 使用这个新列。您可以使用scale_color_manual() 更改颜色。

    ggplot(data=test,aes(x=prodTime,y=reorder(factor(product),prodTime),color=high)) + 
          geom_segment(aes(yend=product, xend=0)) + geom_point() + 
          coord_cartesian(xlim=c(2.5, 4.25)) + theme_minimal() + 
          theme(panel.grid.major.y=element_blank(), axis.ticks=element_blank()) + 
          labs(x='', y='') + 
          geom_vline(aes(xintercept=3.7), color = 'red', linetype = 'dashed') +
          geom_vline(aes(xintercept=3.3), color = 'blue', linetype = 'dashed')+
          scale_color_manual(values=c("grey50","red"),guide=FALSE)
    

    【讨论】:

    • 其实很简单!非常感谢
    猜你喜欢
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多