2017-08-25 5 views
2

私のggplotにテーブルを追加したいと思います。そのテーブルの中で、私はいくつかの文字値(Winsorized平均と標準偏差のための)に下付き文字を追加する必要があります。これはparse = TRUEと指定したときに達成できますが、その結果、sprintfを使用してフォーマットされた末尾のゼロが失われます。 plotmathを使用してテーブルの末尾にゼロを保持する方法はありますか?後続ゼロgtable内の解析を使用して末尾のゼロを保持する方法

# exmple data 
data(iris) 

# packages 
library(dplyr) 
library(tidyr) 
library(ggplot2) 
library(psych) 
library(gridExtra) 
library(grid) 
library(gtable) 

# sumarise data 
summary.df <- iris %>% 
    group_by(Species) %>% 
    summarise(mean_length = mean(Sepal.Length), 
      meanw_length = winsor.mean(Sepal.Length), 
      sd_length = sd(Sepal.Length), 
      sdw_length = winsor.sd(Sepal.Length, trim=0.05)) %>% 
    gather(key='Metric', value='Value', 
     mean_length, meanw_length, 
     sd_length, sdw_length) %>% 
    mutate(Value = sprintf("%2.1f", Value)) %>% 
    spread(key=Species, value=Value) 

# rename metrics 
# use plotmath notation for subsript 
summary.df$Metric[summary.df$Metric == 'mean_length'] <- 'Mean' 
summary.df$Metric[summary.df$Metric == 'meanw_length'] <- 'Mean[w]' 
summary.df$Metric[summary.df$Metric == 'sd_length'] <- 'SD' 
summary.df$Metric[summary.df$Metric == 'sdw_length'] <- 'SD[w]' 

# regular theme 
tt <- ttheme_default(core = list(fg_params=list(cex = 0.7)), 
        colhead = list(fg_params=list(cex = 0.7)), 
        rowhead = list(fg_params=list(cex = 0.7))) 

# theme with parsing 
tt_parse <- ttheme_default(core = list(fg_params=list(cex = 0.7, 
                 parse=TRUE)), 
          colhead = list(fg_params=list(cex = 0.7)), 
          rowhead = list(fg_params=list(cex = 0.7))) 


# Graph with regular table theme 
iris %>% 
    ggplot(aes(x=Sepal.Length, fill=Species)) + 
    geom_density(alpha = 0.8) + 
    coord_cartesian(ylim = c(0, 1.5)) + 
    labs(title = 'Regular Theme') + 
    annotation_custom(grob=tableGrob(summary.df, theme=tt, rows=NULL), 
        xmin=6.25, xmax=8, 
        ymin = 1, ymax=1.4) 

# graph with table theme with parsing 
iris %>% 
    ggplot(aes(x=Sepal.Length, fill=Species)) + 
    geom_density(alpha = 0.8) + 
    coord_cartesian(ylim = c(0, 1.5)) + 
    labs(title = 'Theme with Parsing') + 
    annotation_custom(grob=tableGrob(summary.df, theme=tt_parse, rows=NULL), 
        xmin=6.25, xmax=8, 
        ymin = 1, ymax=1.4) 

Regular Plot Table

Plot Table with Parsing

答えて

2

5.0は、文字列ではなく、数値として解釈されることを確実に印刷することができます。 がhere所定の提案に続いて、溶液をの使用に基づいている:従って

sprintf('"%2.1f"',5.0) 
# [1] "\"5.0\"" 

、修正されたコードは次のとおり

data(iris) 
library(dplyr) 
library(tidyr) 
library(ggplot2) 
library(psych) 
library(gridExtra) 
library(grid) 
library(gtable) 

summary.df <- iris %>% 
    group_by(Species) %>% 
    summarise(mean_length = mean(Sepal.Length), 
      meanw_length = winsor.mean(Sepal.Length), 
      sd_length = sd(Sepal.Length), 
      sdw_length = winsor.sd(Sepal.Length, trim=0.05)) %>% 
    gather(key='Metric', value='Value', 
     mean_length, meanw_length, 
     sd_length, sdw_length) %>% 
    mutate(Value = sprintf('"%2.1f"', Value)) %>% 
    spread(key=Species, value=Value) 

summary.df$Metric[summary.df$Metric == 'mean_length'] <- 'Mean' 
summary.df$Metric[summary.df$Metric == 'meanw_length'] <- 'Mean[w]' 
summary.df$Metric[summary.df$Metric == 'sd_length'] <- 'SD' 
summary.df$Metric[summary.df$Metric == 'sdw_length'] <- 'SD[w]' 

tt_parse <- ttheme_default(core = list(fg_params=list(cex = 0.7, 
                 parse=TRUE)), 
          colhead = list(fg_params=list(cex = 0.7)), 
          rowhead = list(fg_params=list(cex = 0.7))) 

iris %>% 
    ggplot(aes(x=Sepal.Length, fill=Species)) + 
    geom_density(alpha = 0.8) + 
    coord_cartesian(ylim = c(0, 1.5)) + 
    labs(title = 'Theme with Parsing') + 
    annotation_custom(grob=tableGrob(summary.df, theme=tt_parse, rows=NULL), 
        xmin=6.25, xmax=8, 
        ymin = 1, ymax=1.4) 

enter image description here

関連する問題