2

yバーの上に値を追加しようとする ggplot2 を使用してバープロットを作成するコードに苦労していますが、x軸のラベルは移動しません。 geom_textバーに値を追加するにはうまくx機能しますが、45°回転すると軸ラベルを適切に調整できません (つまり、ラベルの最後の文字が軸に貼り付けられます)。

私のデータ

 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ラベルの最後の文字ではなくラベルの中央に収まることを除いて、プロットはうまく見えます。

4

2 に答える 2

4

に追加hjust=1axis.text.x=て変更vjust=0する必要がありvjust=1ます。バーの外観を変更するには、平方根などの y 値の変換を で試すことができますscale_y_sqrt()。の位置のみを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

ここに画像の説明を入力

于 2013-02-16T09:07:06.220 に答える
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)
         })

ここに画像の説明を入力

編集

バー レベル間の差を減らすために、ここでの 1 つのアイデアは、ログ スケールを使用することです。

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)
         })

ここに画像の説明を入力

于 2013-02-16T09:34:13.503 に答える