2017-07-17 4 views
2

に基づいて、列間の変化距離Iは、以下のバープロット有する:geom_bar、可変

library(ggplot2) 

df<- data.frame(type = c("a","a","a","b","b","b","c","c","c","d","d","d","e","e","e"), 
     percentage = c(0.3,0.3,0.4,0.2,0.1,0.7,0.3,0.3,0.4,0.8,0.1,0.1,0.3,0.05,0.65), 
     size = c(4,4,4,1,1,1,0.5,0.5,0.5,1,1,1,1,1,1), 
     class = as.factor(c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3))) 

ggplot(df, aes(x=type, y=percentage, width=size/3)) + 
    geom_bar(aes(fill = class), stat="identity") + 
    theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust=0.3, size=10.)) + 
    scale_x_discrete(name="type") + 
    scale_y_continuous(name="Percentage",labels=scales::percent) + 
    theme(plot.title = element_text(hjust = 0.5)) + 
    scale_fill_discrete(name = "") 

enter image description here

列(又はX-目盛り)が等間隔れます。

私は列がない平等、

+1

ディスクリートスケールは一の単位離隔定義によるものです。おそらくあなた自身の大規模なxスケールを定義し、ブレークとラベルを調整する必要があります。 – Axeman

+0

ありがとう@アックスマン、それは私が望むように動作します。 –

答えて

1

感謝は2つの答えを@Axemanする他よりも狭くなっている列の間の空白を削減しようとすると、ここで問題に最適なソリューションであるスペースへの道を見つけたいですこれは、列間で均等に空白を可能にする:

library(ggplot2) 

df<- data.frame(type = c("a","a","a","b","b","b","c","c","c","d","d","d","e","e","e"), 
     percentage = c(0.3,0.3,0.4,0.2,0.1,0.7,0.3,0.3,0.4,0.8,0.1,0.1,0.3,0.05,0.65), 
     size = c(4,4,4,1,1,1,0.5,0.5,0.5,1,1,1,1,1,1), 
     class = as.factor(c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3))) 

df$summ <- c(0,0,0, na.omit(0.5 * df$size + 0.5 * dplyr::lag(df$size, n=3))) + 
      max(df$size)/5.0 
df$summ <- ave(df$summ,df$class,FUN=cumsum) 

ggplot(df, aes(x=summ, y=percentage, width=size)) + 
    geom_bar(aes(fill = class), stat="identity") + 
    theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust=0.3, size=10.)) + 
    scale_x_continuous(name="type", breaks=unique(df$summ), labels=c("a","b","c","d","e")) + 
    scale_y_continuous(name="Percentage",labels=scales::percent) + 
    theme(plot.title = element_text(hjust = 0.5)) + 
    scale_fill_discrete(name = "") 

Solution

+0

これをもっと正確にすることができます。例:breaksは 'c(0、cumsum(0.5 * sizes + 0.5 * dplyr :: lag(sizes)))+ cumsum(rep(0.2、4)))'となります。 c(4,1,0.5,1,1) 'であり、「0.2」は空白のサイズである。 – Axeman

+1

もう一度ありがとうAxeman、私はこのアイデアをより良い解決策に加えるつもりです –

関連する問題