我有一个简单的数据结构:案例是国家,每个国家我有几个数字变量。像这样:
dat <- data.frame(country = c("Belgium", "Germany", "Holland", "Ireland"), Var1 = 1:4, Var2 = 11:14)
print(dat, row.names = FALSE)
country Var1 Var2
Belgium 1 11
Germany 2 12
Holland 3 13
Ireland 4 14
表格需要格式化,标题为粗体,行颜色为灰色或白色,交替显示。
现在,我想要的是在“country”和“Var1”之间添加两个额外的列。第一个新列称为“标志”,应包含国家/地区的标志。第二个新栏目被称为“被标记”,其中包含一个红旗的图像,该国家在特定的人权问题上得分非常糟糕,如果得分平庸则没有其他方面的橙旗。
如何创建在R中以这种方式打印的对象?如何在这种布局中将图像与数据相结合?
(最终这将是使用knitr
创建的更大文档的一部分)
答案 0 :(得分:13)
如果您对rmarkdown package使用 knitr ,则非常简单 - 只需使用Markdown语法![]()
来包含图片,例如
---
title: "Flags"
author: "Yihui Xie"
date: "2014/08/03"
output: html_document
---
```{r results='asis'}
dat <- data.frame(
country = c('Canada', 'United Kindom'),
abbr = c('ca', 'gb'),
var1 = c(1, 2),
var2 = rnorm(2)
)
dat$flag <- sprintf('![](http://flagpedia.net/data/flags/mini/%s.png)', dat$abbr)
library(knitr)
kable(dat)
```
答案 1 :(得分:3)
使用this experimental fork of gtable,您可以这样做,
require(gtable)
dat <- data.frame(country = c("Belgium", "Germany", "Holland", "Ireland"), Var1 = 1:4, Var2 = 11:14)
g <- gtable_table(dat)
library(png)
# pirate-land flag for illustration
img <- readPNG(system.file("img", "Rlogo.png", package="png"), native = FALSE)
imgRgb <- rgb(img[,,1],img[,,2],img[,,3])
dim(imgRgb) <- dim(img)[1:2]
flags <- replicate(nrow(g), rasterGrob(imgRgb), simplify = FALSE)
g <- gtable_add_cols(g, unit(1,"cm"), 0)
g <- gtable_add_grob(g, flags, t = seq_len(nrow(g)), l=1, r=1, z=1)
grid.newpage()
grid.draw(g)
formatting options described here
答案 2 :(得分:1)
问题是用pdf作为输出,这是一个使用knitr的答案,更合适的东西只是\ includegraphics
诀窍是使用latex中的adjustbox包,使用以下参数:
height
(后来用作R函数get_picture_code
的参数)是图片的高度。valign
参数(此处默认为valign = m),将根据文字执行垂直调整,margin
的{{1}}允许将图片分开。所以我们只使用这个功能
1ex
获取添加到表格中的图像矢量。
最后我们使用xtable和参数get_picture_code <- function(path,height,col=NULL)
{
paste0("\\adjustimage{height=",height,",valign=m,margin*=1ex}{",path,"}")
}
来打印tex代码:
sanitize.text.function = identity
adjustbox文档包含许多其他选项,包括背景颜色,修剪,水平对齐,这将允许您对图像的位置进行一些非常精细的调整... 在TeX-Latex stackexchange
中使用此包也有一个很好的例子