如何在ggplot2中使坐标轴刻度朝内?

24

我使用ggplot2制作了一个条形图,我需要提交的期刊要求轴刻度朝内。

这是我的数据

Mean.Inc.melt <- data.frame(
  Var1 = factor(rep(c("Harvest", "Pre-Harvest"), 3)),
  Var2 = factor(rep(c("Dip A", "Trip A", "Trip B"), each = 2L)),
  value = c(2, 34, 1, 36, 3, 46)
)

包括标准错误

SEM.Inc.melt <- data.frame(
  Var1 = factor(rep(c("Harvest", "Pre-Harvest"), 3)),
  Var2 = factor(rep(c("Dip A", "Trip A", "Trip B"), each = 2L)),
  value = c(1, 12, 1, 2, 1, 6)
)

这是我迄今为止用来创建图表的脚本:

ggplot(Mean.Inc.melt,aes(x=Var2,y=value,fill=Var1))+
  geom_bar(stat='identity',position=position_dodge(),colour='black')+
  scale_fill_manual(values=c('#000000','#FFFFFF'))+
  geom_errorbar(aes(ymin=Mean.Inc.melt$value-SEM.Inc.melt$value,
                    ymax=Mean.Inc.melt$value+SEM.Inc.melt$value),width=.1,
                    position=position_dodge(.9))+
  xlab('Treatment')+
  ylab('Percentage Incidence (%)')+
  ylim(0,60)+
  scale_y_continuous(expand=c(0,0),limits=c(0,60))+
  scale_x_discrete(expand=c(0,0))+
  theme_bw()+
  theme(axis.line=element_line(colour='black'),panel.grid.major=element_blank(),
        panel.grid.minor=element_blank(),panel.border=element_blank(),
        panel.background=element_blank())+
  geom_vline(xintercept=0)+theme(legend.position='none')

我的意思是 - 有人知道我是否可以让我的轴向内吗?

1个回答

24

虽然我不明白期刊为什么要在内部加上刻度标记,但使用ggplot可以很容易地实现这一点。

axis.ticks.length参数可用于theme,它允许您设置刻度标记的长度。如果将其设置为负值,则刻度标记将向内绘制。例如(重新发布Dennis Murphy在此处提供的解决方案):

library(ggplot2)
library(grid)
ggplot(mtcars, aes(disp, mpg)) + geom_point() + 
  theme(axis.ticks.length=unit(-0.25, "cm"))

enter image description here

请注意,该值应作为unit对象传递,这需要加载(预安装在 R 中的) grid包。


2
在ggplot 2.0.0中,出现了一个警告消息:'axis.ticks.margin'已被弃用。请改为设置'axis.text'的'margin'属性。然而,似乎axis.text = element_text(margin=5)并没有起作用...如果解决方案能够被搜索到,我会再次发布回来。 - xealits
10
根据试验法,现在你需要这样做:theme(axis.ticks.length=unit(-0.25, "cm"), axis.text.x = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")), axis.text.y = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm"))) -- 这个方法似乎没有继承 axis.text 的设置,而且错误提示要求 margin 是一个长度为 4 的向量。 - xealits

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