ggplot2 - 突出显示特定值

时间:2014-12-15 08:21:53

标签: r ggplot2

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

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称为要突出显示的唯一(标签,片段和点)。

任何建议都是最受欢迎的。

1 个答案:

答案 0 :(得分:5)

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

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

然后在color=的{​​{1}} aes()中使用此新列。您可以使用ggplot()更改颜色。

scale_color_manual()

enter image description here