我正在努力使用我的代码创建一个带有ggplot2的条形图,其中我尝试在条形图上添加y
值,但不移动x
轴的标签。
geom_text
非常适合在条形图上添加值,但是当旋转45˚(即标签的最后一个字母贴在轴上)时,我无法正确调整x
轴标签。
我的数据
dput(graph)
structure(list(x = structure(1:9, .Label = c("AAAAAAAAAAAAA",
"BBBBBBBB", "CCCCCCCCCCCCCCCC", "DDDDD", "EEEEEEEE", "FFFFFFF",
"GGGGGGGGGGGGGGG", "HHHHHHHHHHHHHH", "IIIII"), class = "factor"),
y = c(1L, 5L, 10L, 1000L, 20L, 15L, 45L, 30L, 35L)), .Names = c("x",
"y"), class = "data.frame", row.names = c(NA, -9L))
我的代码:
graph <- read.table("input.txt",header=T,sep=";")
output <- ggplot(graph,aes(x=x,y=y))+
geom_bar(stat="identity")+
geom_text(aes(label=y,y=(y+25)))+
scale_x_discrete()+
scale_y_continuous(limits=c(0,max(50 + graph$y)))+
theme(axis.text.x=element_text(angle=45,vjust=0))
print(output)
我无法发布输出图像,但除了x
轴的刻度线适合x
标签的中间而不是标签的最后一个字母外,图表看起来很好。
答案 0 :(得分:3)
您应该将hjust=1
添加到axis.text.x=
并将vjust=0
更改为vjust=1
。要更改条形的外观,您可以尝试使用scale_y_sqrt()
来转换y值,例如平方根。只应调整geom_text()
的位置。
output <- ggplot(graph,aes(x=x,y=y))+
geom_bar(stat="identity")+
geom_text(aes(label=y,y=(y+c(10,10,10,50,10,10,10,10,10))))+
scale_y_sqrt(limits=c(0,max(50 + graph$y)),breaks=c(10,100,250,500,1000))+
theme(axis.text.x=element_text(angle=45,vjust=1,hjust=1))
output
答案 1 :(得分:1)
这里有一个像ggplot2的格子版本:
library(lattice)
library(latticeExtra)
barchart(y~x, data=dat,
scales = list(x = list(rot=45,cex=1.5)),
par.settings = ggplot2like(), axis = axis.grid,
panel=function(x,y,...){
panel.barchart(x,y,...)
panel.text(x,y,label=y,col='red',
adj=c(0.5,-0.5),cex=2)
})
修改强>
为了减少条形水平之间的差异,这里的一个想法是使用对数比例:
library(lattice)
library(latticeExtra)
barchart(y~x, data=dat,
scales = list(x = list(rot=45,cex=1.5),
y = list(log=10)),
par.settings = ggplot2like(), axis = axis.grid,
yscale.components = yscale.components.log10ticks,
panel=function(x,y,...){
panel.barchart(x,y,...)
panel.text(x,y,label=10^y,col='red',
adj=c(0.5,-0.5),cex=2)
})