2017-06-05 15 views
1

希望のトピックは見つかりませんでした。棒グラフをカスタマイズする - 棒グラフをグラフの下の表と整列させる

私は、追加のデータを使用してthis偉大な答えからコードをカスタマイズしてみてください:

df <- structure(list(year = 1998:2007, work = c(0L, 4L, 0L, 1L, 0L, 0L, 1L, 2L, 2L, 3L), confid = c(0L, 0L, 0L, 0L, 0L, 2L, 0L, 0L, 3L, 0L), jrs = c(0L, 1L, 0L, 0L, 1L, 9L, 6L, 4L, 21L, 2L)), .Names = c("year", "work", "confid", "jrs"), class = "data.frame", row.names = c(NA, -10L)) 

library(ggplot2) 
library(reshape) 
md <- melt(df, id=(c("year"))) 

library(grid) 
library(gridExtra) 

# Function to extract legend 
# https://stackoverflow.com/a/13650878/496488 
g_legend <- function(a.gplot){ 
    tmp <- ggplot_gtable(ggplot_build(a.gplot)) 
    leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box") 
    legend <- tmp$grobs[[leg]] 
    return(legend)} 

p = ggplot(data=md, aes(x=year, y=value, fill=variable)) + 
    geom_bar(stat="identity")+ 
    #theme(axis.text.x=element_text(angle=90, vjust=0.5, hjust=0.5))+ 
    ggtitle("Score Distribution") + 
    labs(fill="") 

# Extract the legend as a separate grob 
leg = g_legend(p) 

# Create a table grob 
tab = t(df) 
tab = tableGrob(tab, rows=NULL) 
tab$widths <- unit(rep(1/ncol(tab), ncol(tab)), "npc") 

# Lay out plot, legend, and table grob 
grid.arrange(arrangeGrob(nullGrob(), 
         p + guides(fill=FALSE) + 
          theme(axis.text.x=element_blank(), 
           axis.title.x=element_blank(), 
           axis.ticks.x=element_blank()), 
         widths=c(1,8)), 
      arrangeGrob(arrangeGrob(nullGrob(),leg,heights=c(1,10)), 
         tab, nullGrob(), widths=c(6,20,1)), 
      heights=c(4,1)) 

私は最後に番号を変更しようとしましたが、私は再び同じ結果を受け取ります。テーブルはグラフよりも小さく、グラフのバーは正しい位置にありません。

最後に番号をカスタマイズするにはどうすればよいですか?

ここで私が見るもののスクリーンショット: 私がチェックした画像1ではenter image description here

それが今では2年には思われるとバーは1999年と同じ行にする必要がありますので。画像の2は、プロットと同じ幅を持たなければならないテーブルを示しており、年は対応する各バーから下になるはずです。

+0

あなたが質問のドミノを作りました。それは必ずしも悪くはありません。あなたが別の質問を投稿し、あなたの質問を1つの投稿に尋ねたり編集したりしないというのは良い習慣です。それとあなたの良い質問に+1。あなたの質問については、そのために 'widths'を変更してみてください。 – Masoud

+0

正確に何を変更したいのですか(また、新しいデータフレームとともに、eipi10の回答と比べて何が変更されましたか)?私がex。を走らせると、バーは私が期待しているように並んでいるようです(?)。 – lukeA

答えて

2

これは、widthsを変更することによって達成されます。私が望むようにそれらを修正しましたが、あなたは下の修正を見て、そして数字を使って遊ぶことによって、それがどのように機能するかという考えを得ることができます。

# Lay out plot, legend, and table grob 
grid.arrange(arrangeGrob(nullGrob(), 
        p + guides(fill=FALSE) + 
         theme(axis.text.x=element_blank(), 
          axis.title.x=element_blank(), 
          axis.ticks.x=element_blank()), 
        widths=c(1,8)), 
     arrangeGrob(arrangeGrob(nullGrob(),leg,heights=c(1,10)), #Can ignore this change 
        tab, nullGrob(), widths=c(10,45,2)), #'6' to '10' is the vital change 
     heights=c(5,1)) #Modified this to improve spacing between table and graph 

これはあなたのコードの最後に、これらの変更を適用するグラフのようになります。

enter image description here

+0

エクスポートに問題がある場合は、[グラフィカルデバイスウィンドウのプロット()の端をカットする方法を教えてください。]](https://stackoverflow.com/questions/12135982/how-to-stop-graphical-device-window-プロットのカットオフエッジ) – Masoud

関連する問題