R中的comment_customs(tableGrob)中显示的小数位数

时间:2019-05-03 23:12:36

标签: r ggplot2 gridextra

我想添加一个摘要表以使用ggplot进行绘图。我正在使用annotation_custom添加先前创建的表。 我的问题是表格显示的小数位数不同。 例如,我正在使用mtcars数据库,而我的代码行如下:

rm(list=ls()) #Clear environment console
data(mtcars)
head(mtcars)

library(dplyr)
library(tidyr)
library(ggplot2)
library(gridExtra)

table <- mtcars %>% #summary table that needs to be avelayed to the plot
  select(wt) %>%
  summarise(
    Obs = length(mtcars$wt),
    Q05 = quantile(mtcars$wt, prob = 0.05),
    Mean = mean(mtcars$wt),
    Med = median(mtcars$wt),
    Q95 = quantile(mtcars$wt, prob = 0.95),
    SD = sd(mtcars$wt)) 

dens <- ggplot(mtcars) + #Create example density plot for wt variable
  geom_density(data = mtcars, aes(mtcars$wt))+
  labs(title = "Density plot")
plot(dens)

dens1 <- dens + #Overlaping summary table to density plot
  annotation_custom(tableGrob(t(table), 
                              cols = c("WT"),
                              rows=c("Obs", "Q-05", "Mean", "Median", "Q-95", "S.D." ),
                              theme = ttheme_default(base_size = 11)),
                    xmin=4.5, xmax=5, ymin=0.2, ymax=0.5)
print(dens1)

运行上一个,我得到以下图片 density plot

我想将显示的小数位数固定为2。

我已经尝试添加sprintf

annotation_custom(tableGrob(t(sprintf("%0.2f",table)),

但是获得了以下错误“ sprintf(“%0.2f”,table_pet)中的错误:   (列表)对象不能强制输入“ double””

我一直都没看。知道我该怎么做。

提前谢谢

1 个答案:

答案 0 :(得分:0)

grid.table由您自己决定格式,

d = data.frame(x = "pi", y = pi)
d2 = d %>% mutate_if(is.numeric, ~sprintf("%.3f",.))

grid.table(d2)