我有以下两个问题:(1)我想让标签位于两个刻度之间。我最初的想法是添加辅助刻度并删除主刻度,但是 axis.minor.ticks.length.y 不起作用 (2) 在图例处添加 stat_summary 点 非常感谢您回答您的问题!
这是代码和图:
library("ggplot2")
dt <- data.frame(
ca = rep(c("Oesophageal cancer", "Gastric cancer", "Colorectal cancer"), 3),
var1 = c(1:3, -4:-6, 7:9),
var2 = rep(LETTERS[1:3], 3)
)
dt %>%
ggplot(aes(var1, ca, fill = var2))+
geom_bar(stat="identity", width=0.8)+
stat_summary(fun=sum, geom="point",colour="grey40", fill="grey40", shape=20, size=2)+
geom_vline(xintercept=0, colour="grey30", linetype="dotted")+
theme(
axis.minor.ticks.length.y = rel(0.5)
)
目的:将图1改为图2样式
您需要转换为连续刻度才能使用小刻度,因为离散轴上没有小中断:
据我所知,ggplot2 不具备在离散尺度的轴中断之间添加辅助刻度的功能。但由于 ggplot2 的灵活性,我们可以手动添加它们,无需太多麻烦,只需在垂直轴上绘制一些线(线段),并添加一个设置,
coord_cartesian
以便绘图边界之外的图形元素不会被删除。要将刻度定位在每个文本标签之间的离散变量的垂直轴上,我们必须创建一个等于轴中断负 0.5 的数字序列,因为映射到轴的离散值具有数字垂直位置,因此减去 0.5 将给我们每个标签之间的中间位置。
为了在绘图边界之外绘制,我们必须为 x 轴添加硬限制,这将允许我们在绘图中绘制元素,而无需拉伸垂直轴来适应它们,因为默认情况下 ggplot 希望所有绘制的元素都在绘图区域内,并将拉伸轴以适应它们。我们在
limits_x_axis
对象中执行此操作。