ggplot绘图如何分别设置坐标轴刻度和标签

3

我希望找到一种方法,在ggplot中创建不同位置的刻度和标签。

示例代码:

#load libraries
library(ggplot2)
library(reshape2)

#create data
df <-data.frame(A=1:6,B=c(0.6,0.5,0.4,0.2,0.3,0.8),C=c(0.4,0.5,0.6,0.8,0.7,0.2),D=c("cat1","cat1","cat1","cat2","cat2","cat2"))
df 
df1 <- melt(df,measure.vars=c("B","C"))

#plot
p <- ggplot()+
  geom_bar(data=df1,aes(x=A,y=value,fill=variable),stat="identity")+
  theme(axis.title=element_blank(),legend.position="none")
print(p)

在这个图中,默认情况下刻度线和标签位于同一位置(由breaks定义)。由于主题的缘故,x轴线完全缺失。

相反,我希望将刻度线放置在以下这些位置上:

tpoint <- c(1,3,4,6)

在这些位置上添加标签。
lpoint <- data.frame(pos=c(2,5),lab=c("cat1","cat2"))

最终会得到类似下图的图形,其中包含部分x轴线或完整的x轴线: enter image description here 这将使我的标签就位。
p1 <- p + scale_x_discrete(breaks=lpoint$pos,labels=lpoint$lab)

但是刻度的位置不正确,同时也无法使用多个刻度尺?

1
你可以使用facet_wrap来获得相似的输出:p2 <- p + facet_wrap(~D, scales = "free_x")。 - Mahrtynas
1个回答

4
我能为您提供的最接近您所需输出的内容是这样的:

我能够为您提供的最接近您所需输出的内容是这样的:

dfannotate <- data.frame(x = c(2, 5), xmin = c(1, 4), xmax = c(3, 6), y = -.01, height=.02)
dfbreaks = data.frame(lim = 1:6, lab = c('', 'cat1', '', '', 'cat2', ''))

p + geom_errorbarh(data = dfannotate, aes(x, y, xmin=xmin, xmax=xmax, height=height)) +
  scale_x_discrete(limits=dfbreaks$lim, labels=dfbreaks$lab) +
  scale_y_continuous(expand = c(0, 0), limits=c(-0.02, 1.02)) +
  theme(axis.ticks.x = element_line(linetype=0))

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