示例数据来自TextView
。
mpg
两个类别作为主轴 - class和drv。 数量只是每个等级和drv交叉点的汽车数量。 Isnew是新车(2008年对1999年)的一部分。
library(tidyverse) # for dplyr and ggplot2
data <- mpg %>%
mutate(quantity = 1, isnew = ifelse(year == 2008, 1, 0)) %>%
group_by(drv, class) %>%
summarise(quantity = sum(quantity), isnew = round(sum(isnew) / quantity, 2))
热图
drv class quantity isnew
<chr> <chr> <dbl> <dbl>
1 4 compact 12 0.67
2 4 midsize 3 0.67
3 4 pickup 33 0.52
4 4 subcompact 4 0.00
5 4 suv 51 0.53
6 f compact 35 0.40
7 f midsize 38 0.50
8 f minivan 11 0.45
9 f subcompact 22 0.50
10 r 2seater 5 0.60
11 r subcompact 9 0.56
12 r suv 11 0.55
我希望实现的是将每个部分的文本值更改为堆积条形。
每个条形图的顶部块必须是透明的,以保存热图的初始颜色。底部必须代表热图的该扇区的ggplot(data, aes(class, drv)) +
geom_tile(aes(fill = quantity)) +
geom_text(aes(label = isnew))
值。
在Paint 8p
中绘制一些所需输出的部分(只是几个条,但我想要它们全部)发现in here可能可以通过isnew
包完成。但它似乎已被弃用,并且&#34;嵌入ggplot2图形&#34;如Grolemund github所述。
答案 0 :(得分:1)
这个情节对我来说似乎很混乱,但是我无法抗拒制造它。我们使用geom_segment
来创建条形码,并使用基础drv
因子编码将条形和文本标签放置在y轴上的适当位置。
ggplot(data, aes(class, drv)) +
geom_tile(aes(fill = quantity), colour="white", size=0.5) +
geom_segment(aes(y=as.numeric(as.factor(drv)) - 0.5,
yend=as.numeric(as.factor(drv)) - 0.5 + isnew,
x=class, xend=class),
colour="yellow", size=10) +
geom_text(aes(label = isnew, y=(2*as.numeric(as.factor(drv)) + isnew)/2 - 0.5),
colour="grey30", size=3) +
theme_classic()
或许使用尺寸美的geom_point
会更好:
ggplot(data, aes(class, drv)) +
geom_tile(aes(fill = quantity), colour="white", size=0.5) +
geom_point(aes(size=isnew), shape=21, fill="white") +
scale_size_continuous(range=c(1,10)) +
theme_classic()