如何从具有四舍五入数字的数据框中将 table 导出为 PNG
How to export a table as PNG from data frame with rounded digits
我有很多像 df
这样的数据框,只有几列和几行。因此,我搜索了一些东西来将我的 tables 直接写成 png 文件。所以我不必在另一个程序中自己生成所有 table。
df <- structure(c(1.688, 2.402, 2.636, 2.656, 2.8, 2.337, 0.261, 0.3,
0.299, -0.158, -0.79, -0.115, 2.196, 3.067, 3.31, 3.437, 3.526,
3.012, 1.895, 2.643, 3.31, 3.085, 3.07, 2.735), .Dim = c(6L,
4L), .Dimnames = list(c("U", "V", "W", "X", "Y", "Z"), c("A",
"B", "C", "D")))
我已经阅读了一些有关 grid.table
(包 gridExtra
)和 htmlTable
(包 htmlTable
)函数的内容,我还尝试编写一些代码已经讨论过。就我而言,我还没有找到解决方案。事先,这两个功能实际上都有效。
grid.table(df)
htmlTable(df)
在我的案例和最科学的工作中,数字在整个 table 中应该是相同的。所以 0.300
应该写成 0.300
而不是 0.3
。据我所知,这两个函数都不包含 round
或 digits
函数。
用@jay.sf的代码我可以解决四舍五入的问题。
df <- apply(df, 1:2, formatC, format="f", digits=3) # format digits
pdf("df.pdf", height = 12, width = 10)
grid.table(df)
dev.off()
所以我找到了我的table,我的值四舍五入了 3 位数字。
额外的 title 会很好,但不是绝对必要的。
提前致谢!
有办法策划这件事。
df <- apply(df, 1:2, formatC, format="f", digits=3) # format digits
# Helper sequences
sy <- seq(.9, 0, length.out=nrow(df))
sx <- seq(0.1, 1, length.out=ncol(df))
adj <- .03 # for adjustment
png(width=600, height=400, res=100)
par(mar=c(2, 2, 4, 2) + 0.1)
plot.new() # initialize plot
# plot column names
sapply(seq(ncol(df)), function(x)
text(sx[x] - adj, 1 + adj, colnames(df)[x], font=2, xpd=TRUE))
# plot row names
sapply(seq(nrow(df)), function(x)
text(0 - adj, sy[x], rownames(df)[x], font=2, xpd=TRUE))
# plot values
mapply(function(x, y) text(sx[x], sy[y], labels=df[y, x]),
rep(seq(ncol(df)), each=nrow(df)), rep(seq(nrow(df)), ncol(df)))
# plot title
text(-.05, 1.2, "Good additional title here", xpd=TRUE, cex=1.5, font=2, adj=0)
dev.off()
生成的 PNG:
我有很多像 df
这样的数据框,只有几列和几行。因此,我搜索了一些东西来将我的 tables 直接写成 png 文件。所以我不必在另一个程序中自己生成所有 table。
df <- structure(c(1.688, 2.402, 2.636, 2.656, 2.8, 2.337, 0.261, 0.3,
0.299, -0.158, -0.79, -0.115, 2.196, 3.067, 3.31, 3.437, 3.526,
3.012, 1.895, 2.643, 3.31, 3.085, 3.07, 2.735), .Dim = c(6L,
4L), .Dimnames = list(c("U", "V", "W", "X", "Y", "Z"), c("A",
"B", "C", "D")))
我已经阅读了一些有关 grid.table
(包 gridExtra
)和 htmlTable
(包 htmlTable
)函数的内容,我还尝试编写一些代码已经讨论过。就我而言,我还没有找到解决方案。事先,这两个功能实际上都有效。
grid.table(df)
htmlTable(df)
在我的案例和最科学的工作中,数字在整个 table 中应该是相同的。所以 0.300
应该写成 0.300
而不是 0.3
。据我所知,这两个函数都不包含 round
或 digits
函数。
用@jay.sf的代码我可以解决四舍五入的问题。
df <- apply(df, 1:2, formatC, format="f", digits=3) # format digits
pdf("df.pdf", height = 12, width = 10)
grid.table(df)
dev.off()
所以我找到了我的table,我的值四舍五入了 3 位数字。 额外的 title 会很好,但不是绝对必要的。
提前致谢!
有办法策划这件事。
df <- apply(df, 1:2, formatC, format="f", digits=3) # format digits
# Helper sequences
sy <- seq(.9, 0, length.out=nrow(df))
sx <- seq(0.1, 1, length.out=ncol(df))
adj <- .03 # for adjustment
png(width=600, height=400, res=100)
par(mar=c(2, 2, 4, 2) + 0.1)
plot.new() # initialize plot
# plot column names
sapply(seq(ncol(df)), function(x)
text(sx[x] - adj, 1 + adj, colnames(df)[x], font=2, xpd=TRUE))
# plot row names
sapply(seq(nrow(df)), function(x)
text(0 - adj, sy[x], rownames(df)[x], font=2, xpd=TRUE))
# plot values
mapply(function(x, y) text(sx[x], sy[y], labels=df[y, x]),
rep(seq(ncol(df)), each=nrow(df)), rep(seq(nrow(df)), ncol(df)))
# plot title
text(-.05, 1.2, "Good additional title here", xpd=TRUE, cex=1.5, font=2, adj=0)
dev.off()