r – 如何在ggplot2图中突出显示值的子集?

例如,我有基本的堆积图:

ggplot(钻石,aes(x =因子(颜色),填充=因子(切割)))geom_bar(position =“fill”)

我的小子钻石的“克拉”值大于3:

subset(diamonds,carat>3)

我想在情节(如点或标签,如果我们的钻石将有ID)上突出显示这些特定值,以查看它们所在的分布部分.有没有可能做那样的事情?

PS:不幸的是,我不允许发布数字.

最佳答案 以下内容将“carat大于3”的计数插入到条形段中.我把这个问题分解了很多步骤.步骤1:识别“克拉大于3”的新变量.第2步:获取计数的汇总表 – 每种颜色和切割的钻石数量,以及每种颜色和切割的“大于3”的克拉.我使用了plyr包装中的ddply()函数.步骤3:条形图没有标签的情节.步骤4:在摘要表中添加一个给出标签y位置的变量.步骤5:将geom_text图层添加到图中.geom_text的数据框是汇总表.geom_text()需要美学label(在这种情况下,“carat大于3”的计数),y位置(在上一步中计算)和x位置(颜色).

library(ggplot2)
library(plyr)

# Step 1
diamonds$caratGT3 = ifelse(diamonds$carat > 3, 1, 0)

# Step 2
diamonds2 = ddply(diamonds, .(color, cut), summarize, CountGT3 = sum(caratGT3))
diamonds2$Count = count(diamonds, .(color, cut))[,3]
diamonds2

# Step 3
p = ggplot() + geom_bar(data = diamonds, aes(x=factor(color),fill=factor(cut)))

# Step 4
diamonds2 <- ddply(diamonds2,.(color), 
        function(x) { 
          x$cfreq <- cumsum(x$Count) 
          x$pos <- (c(0,x$cfreq[-nrow(x)]) + x$cfreq) / 2 
          x 
        }) 

# Step 5
(p  <- p + geom_text(data = diamonds2, 
   aes(x = factor(color), y = pos, label = CountGT3),
   size = 3, colour = "black", face = "bold"))
点赞