我有一个从mtcars数据集生成的躲闪条形图,显示齿轮与圆柱的直方图。我想在图表上标记一个特定的汽车标记 - 附图表将更好地说明这一点。代码正在做它应该做的事情(点与x轴标签cyl一致)但我希望这些点与正确的条形对齐,显示齿轮的数量。有什么想法吗?
require(graphics)
carsraw <- mtcars
cars <- mtcars %>%
select(cyl,gear) %>%
mutate(cyl=as.factor(cyl),gear=as.factor(gear)) %>%
group_by(cyl,gear) %>%
tally() %>%
rename(count=n)
Hornet <- mtcars %>%
add_rownames("model") %>%
filter(model %in% c("Hornet 4 Drive","Hornet Sportabout")) %>%
mutate(cyl=as.factor(cyl),gear=as.factor(gear)) %>%
mutate(count=7) %>%
select(model,cyl,gear,count)
(ggplot(data=cars)+
aes(x=cyl,y=count,fill=gear) +
geom_bar( position = "dodge", stat="identity")+
geom_point(data=Hornet,size=5)+
aes(x=cyl,y=count,fill=gear))
答案 0 :(得分:1)
你可以尝试在这种特殊情况下使用position_nudge
,虽然这有点像黑客攻击:
(ggplot(data=cars)+
aes(x=cyl,y=count,fill=gear) +
geom_bar( position = "dodge", stat="identity")+
geom_point(data=Hornet,size=5, position = position_nudge(-0.25))+
aes(x=cyl,y=count,fill=gear))
鉴于OP的评论,这里有一个替代方案可以稍微改变数据的准备。我在这里做的是将整个模型中的模型存在作为汇总函数中的Hornet
列(并为(NA
,cyl
)对添加gear
不包括特定型号)。此外,您必须使用group = gear
和position = position_dodge(1)
:
library(tidyverse)
cars <- mtcars %>%
rownames_to_column("model") %>%
mutate(cyl=as.factor(cyl),gear=as.factor(gear)) %>%
group_by(cyl,gear) %>%
summarise(
count = n(),
Hornet = ifelse(
any(model %in% c("Hornet 4 Drive","Hornet Sportabout")),
7,
NA
)
) %>% ungroup()
cars %>% ggplot() +
geom_col(
aes(
x = cyl,
y = count,
fill = gear
),
position = "dodge"
) +
geom_point(
aes(
x = cyl,
y = Hornet,
group = gear
),
na.rm = TRUE,
position = position_dodge(1),
size = 5
)