如何在ggplot2图中突出显示数值子集?

4
例如,我有一个基本的堆叠图: ggplot(diamonds, aes(x=factor(color),fill=factor(cut)))+geom_bar(position="fill") 我有一小部分钻石的“克拉”值高于3:
subset(diamonds,carat>3)

我希望在图表上突出显示特定的值(如点或标签,如果我们的钻石有ID),以便看到它们所处分布的哪个部分。是否有可能做到这样的事情?

PS:不幸的是,我不能发布图片。

1个回答

2
以下是将“克拉大于3”的计数插入条形图中的步骤。我将问题分解为多个步骤。第一步:新变量标识“克拉大于3”。第二步:获取每种颜色和切割的钻石数量以及每种颜色和切割的“克拉大于3”数量的汇总表。我使用了plyr包中的ddply()函数。第三步:绘制不带标签的条形图。第四步:向汇总表添加一个变量,给出标签的y位置。第五步:在图表中添加geom_text层。geom_text()需要美学标签(在本例中,“克拉大于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"))

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接