tableGrob:设置grid.table的高度和宽度

2023-12-24

我正在尝试创建一个函数,为我提供一个可以用于 indesign、illustrator 或 inkscape 的绘图。在尝试这样做时,我有两个无法解决的问题。

1)设置我的绘图(或只是grobTable)的宽度和高度: 我得到的输出非常小,当在插画中放大它时,字体会随之变大。因此我想用手动定义的宽度和高度绘制绘图。

2) 有时标题、注释和行名会“放错位置”(详细信息请参见图 1 和图 2 之间的区别)。当行名很短时就会发生这种情况。

library(gridExtra)
library(ggplot2)

data(diamonds)

## plot function

kryds.row <- function(x,y, p=100, decor="%", digits=3,
                  titel="", note="", red=219, green=55, blue= 153){

c <- table(x, y)
s <- as.character(sum(c))
s <- paste("Antal svarpersoner=", s, sep=" ")
j <- prop.table(c,1)
r <- c(rownames(j),"Total")
k <- c(colnames(j), "Total")
j <- addmargins(j, margin =2, FUN = sum)
j <- round(j, digits)
j[]<-paste(j*p, decor, sep=" ")

farve <- rgb(red,green,blue, maxColorValue =255)

table     <-   tableGrob(j,
                       cols = k,
                       gpar.coretext = gpar(fontsize = 12),            
                       gpar.coltext  = gpar(fontsize = 12,col="white"),            
                       gpar.rowtext  = gpar(fontsize = 12, fontface="bold"),            
                       gpar.corefill = gpar(fill = rgb(255,255,255, maxColorValue      =255), alpha = 1, col = NA),
                       gpar.rowfill  = gpar(fill = rgb(255,255,255, maxColorValue =255), alpha = 1, col = NA),           
                       gpar.colfill  = gpar(fill = 0, alpha = 1 ,col= "white"),                       
                       equal.width   = TRUE,            
                       show.rownames = TRUE,            
                       show.rsep     = TRUE, 
                       show.hlines   = TRUE,                               
                       show.csep     = FALSE, 
                       show.vlines   = FALSE,
                       show.box      = FALSE,
                       padding.h     = unit(15, "mm"),            
                       padding.v     = unit(8, "mm"),
                       core.just     = "center", 
                       row.just      = "left",
                       separator     = farve)


 hh <- grobHeight(table)
 ww <- grobWidth(table)

 border <- roundrectGrob(x=0.5, y=0.5, width=ww, height=hh,
                      default.units="npc",
                      r=unit(0.1, "snpc"),
                      just="centre",
                      name=NULL, gp=gpar(col="white", fill=farve, vp=NULL)) 

 border2 <- roundrectGrob(x=0.5, y=0.5, width=ww, height=hh,
                       default.units="npc",
                       r=unit(0.1, "snpc"),
                       just="centre",
                       name=NULL, gp=gpar(fill=NA, col=farve, vp=NULL))

 title <- textGrob(titel,
                x=unit(0.5,"npc") -0.5*ww + unit(5, "mm"), 
                y=unit(0.5,"npc") +0.5*hh + unit(2, "mm"), 
                vjust=0,hjust=0, gp=gpar(fontsize=12, fontface="bold"))

 footnote <- textGrob(note, 
                   x=unit(0.5,"npc") - 0.5*ww + unit(5,"mm"),
                   y=unit(0.5,"npc") - 0.5*hh, 
                   vjust=1, hjust=0,gp=gpar( fontsize=10))

 svarpersoner       <- textGrob(s, 
                             x=unit(0.5,"npc") + 0.5*ww -unit(5, "mm"),
                             y=unit(0.5,"npc") + 0.5*hh + unit(2, "mm"), 
                             vjust=0, hjust=1,gp=gpar( fontsize=10))
 grid.newpage()
 gt <- gTree(children=gList(border,table,border2, title, footnote, svarpersoner))
 grid.draw(gt)

}



# Plot it 
kryds.row(diamonds$color, diamonds$cut, titel="title", note="note") # plot 1
kryds.row(diamonds$cut, diamonds$color, titel="title", note="note") # plot 2


# Problems
#1: The title, note and the j in the row.text is very badly placed in plot 1 but not   plot 2
#2 I cannot set the width and height of my table

我还没有清理我的代码,所以请放心!


当前版本的 gridExtra::tableGrob 不允许您设置宽度/高度。不过,您可以尝试不同的方法(实验性) https://github.com/baptiste/tablegrob使用 gtable 从头开始​​构建的 tableGrob 版本。

#library(devtools)
#install_github("tablegrob", "baptiste")
require(tablegrob)

d <- iris[sample(seq.int(nrow(iris)), 6),]

grid.newpage()
pushViewport(viewport(height=0.8,width=0.9))
g2 <- tableGrob(d, rows=NULL,
                widths=unit(1,"null"), heights=unit(1/(nrow(d)),"npc"))
grid.draw(g2)
grid.roundrect(y=unit(0,"line"), height=unit(1,"npc") +unit(1,"lines"),
               just="bottom", r=unit(0.05, "snpc"))

编辑 (08/2015):您现在可以编辑宽度/高度,因为 grid.table 现在基于 gtable。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tableGrob:设置grid.table的高度和宽度 的相关文章

随机推荐

  • 二维数组,用指定值修剪

    使用指定值修剪二维数组的好方法是什么 A 0 0 0 0 0 1 2 3 0 0 4 0 6 0 0 0 0 0 0 0 B trim A 0 results in B 1 2 3 4 0 6 修剪操作应该能够从四个边中的任何一个切掉 伪代
  • Solr:索引没有定义可操作的 DataImportHandler

    我试图使用 DataImportHandler 在云模式下使用 Solr 来索引我的 MySQL 数据库 以下是它使用 default 配置集的配置 solr 7 3 0 server solr configsets default con
  • 在 HTML 中的表格单元格内添加图像

    很抱歉 我无法做这个简单的事情 我无法在表格单元格中添加图像 以下是我编写的代码 CAR APPLICATION table border 5 align center th ABCD th tr th Name th th Origin
  • 某些边缘无法访问隐藏轮廓属性 EdgePrims

    我正在努力改变LineJoin对于 MATLAB 等高线图中的某些线 当我修改EdgePrims 只有 部分线路 受到影响 num incs 3 x linspace 1 1 num incs Xa Ya meshgrid x x Z ab
  • 无法删除所有 Azure 网站连接字符串

    对于我的团队目前正在开发的一个网站 我们正在尝试编写一些 PowerShell 自动化来临时覆盖通常位于 Web config 中的连接字符串 然后稍后将其删除 但是 使用 PowerShell cmdlet 和 Azure REST AP
  • OSX — 配置 Emacs 以使用 NSSpellChecker

    我在对 Aquamacs 进行逆向工程以提取 NSSpellChecker 的用法 功能时遇到问题 我想将这种用途 功能从源代码合并到 Emacs 的基本构建中 我找到了看似相关的文件 ns win el flyspell el and i
  • 初学者:rails 语法

    我刚刚开始学习 ruby on Rails 我正在使用 Rails 敏捷 Web 开发 第 4 版 Rails 3 1 一书 我安装了 Rails 3 1 3 书中的例子显示了这样的代码 但这段代码不起作用 我必须将代码更改为 这有效 但我
  • Tensorflow:没有启用任何 MLIR 优化通道(注册 1)

    我使用一个非常小的模型来使用 TensorFlow 2 3 和 keras 进行测试 查看我的终端 我收到以下警告 I tensorflow compiler mlir mlir graph optimization pass cc 118
  • 从 C# 中的 .resx 文件读取字符串

    如何在 C 中从 resx 文件读取字符串 ResourceManager除非您从某个位置加载 否则不需要external资源 对于大多数情况 假设您创建了一个项目 DLL WinForms 等等 您只需使用项目命名空间 资源 和资源标识符
  • URL 主机中可以显示哪些有效字符?

    我正在编写一些处理 URL 的代码 并且我想确保我不会遗漏一些奇怪的情况 除 A Z 0 9 和 之外 主机是否还有其他有效字符 这包括子域中的任何内容等 本质上是 和第一个 之间的任何内容 Thanks 请参见对有效主机名的限制 http
  • 将 AngularFire 与 Angular ui-router 一起使用时如何启用路由安全?

    是否可以使用AngularFire 路线安全模块 https github com firebase angularFire seed blob master app js module routeSecurity js有角的UI路由器 h
  • 如果我在应用程序中添加 ACTION-VIEW 最终结果是什么?

    我从我的 Android 工作室收到了这个通知 应用程序无法被 Google 搜索索引 考虑添加至少一个 具有 ACTION VIEW 意图填充器的活动 请参阅问题说明 更多细节 添加深层链接以使您的应用程序进入 Google 索引并获得安
  • 如何跟踪 Django 中的按钮单击?

    Views py 我希望能够转到用户页面 然后单击并通过与 Twitter 完全相同的按钮关注他们 我有点知道如何添加用户 正如您在我的视图中通过添加变量看到的那样 但我真的不知道如何将其实际实现到一个按钮中 让我可以跟随用户 我已经被困在
  • “%tB”格式化程序如何工作?

    System out format tB 12 我应该从中得到一个 十二月 但是我得到了一个很好的例外 Exception in thread main java util IllegalFormatConversionException
  • 如何使 Firebase 函数模拟器基于数据库模拟器更新触发

    简而言之 我想测试一个Firebase 功能 https firebase google com docs functions本地 特别是由实时数据库触发器 https firebase google com docs functions
  • 前端实例时间突然增加[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我已经使用 GAE 应用程序 1 年了 每天前端实例时间花费不到 1 美元 然而 今天它突然增加到10美元 我没有做任何事情 应用程序的流
  • 如何让div在浏览器中占据100%视口高度

    我有一个 div 标签 我意识到它没有按应有的方式填充 100 的高度 My code container width 100vw height 100vh background purple body margin 0px div div
  • 阻止 AWS ElasticBeanstalk 中 Apache 中的无效 HTTP_HOST 标头

    我有几个运行部署在 AWS ElasticBeanstalk 中的 Django Apache 的网站 我唯一的问题是每天收到数百封有关此主题的电子邮件 Django ERROR EXTERNAL IP Invalid HTTP HOST
  • 使用 Emscripten 编译 GMP/MPFR

    好吧 这已经让我发疯了 我已经尝试了至少一个月 但互联网上的任何地方都没有帮助 我按照以下步骤操作this https github com kripken gmp js 当我执行这些步骤时 甚至这个示例也不起作用 因为当我这样做时 我得到
  • tableGrob:设置grid.table的高度和宽度

    我正在尝试创建一个函数 为我提供一个可以用于 indesign illustrator 或 inkscape 的绘图 在尝试这样做时 我有两个无法解决的问题 1 设置我的绘图 或只是grobTable 的宽度和高度 我得到的输出非常小 当在