R 图: 大小和分辨率

我已经堆积成问题: 我需要绘制图像的 DPI = 1200和具体的打印大小。

默认情况下,png 看起来没问题..。 enter image description here

png("test.png",width=3.25,height=3.25,units="in",res=1200)
par(mar=c(5,5,2,2),xaxs = "i",yaxs = "i",cex.axis=1.3,cex.lab=1.4)
plot(perf,avg="vertical",spread.estimate="stddev",col="black",lty=3, lwd=3)
dev.off()

但是当我应用这个代码时,图像变得非常糟糕,它无法缩放(适合)到所需的尺寸。我错过了什么?如何“适合”的形象,以情节?

enter image description here,

152513 次浏览

一个可重复的例子:

the_plot <- function()
{
x <- seq(0, 1, length.out = 100)
y <- pbeta(x, 1, 10)
plot(
x,
y,
xlab = "False Positive Rate",
ylab = "Average true positive rate",
type = "l"
)
}

詹姆斯提出的使用 pointsize的建议,结合各种 cex参数,可以产生合理的结果。

png(
"test.png",
width     = 3.25,
height    = 3.25,
units     = "in",
res       = 1200,
pointsize = 4
)
par(
mar      = c(5, 5, 2, 2),
xaxs     = "i",
yaxs     = "i",
cex.axis = 2,
cex.lab  = 2
)
the_plot()
dev.off()

当然,更好的解决方案是放弃这种对基础图形的摆弄,使用一个可以处理分辨率缩放的系统。比如说,

library(ggplot2)


ggplot_alternative <- function()
{
the_data <- data.frame(
x <- seq(0, 1, length.out = 100),
y = pbeta(x, 1, 10)
)


ggplot(the_data, aes(x, y)) +
geom_line() +
xlab("False Positive Rate") +
ylab("Average true positive rate") +
coord_cartesian(0:1, 0:1)
}


ggsave(
"ggtest.png",
ggplot_alternative(),
width = 3.25,
height = 3.25,
dpi = 1200
)

如果你想使用基础图形,你可以看看 这个:

您可以使用 res = 参数指定 png,它指定每英寸的像素数。这个数字越小,以英寸为单位的绘图面积就越大,文本相对于图形本身也就越小。

使用 pointsizecex函数降低各种组件大小的替代解决方案是增加图形的大小以进行补偿。这通过增加所有内容的大小而不仅仅是某些组件来维护规模。当导出时,您的图形将会更大,但是如果您希望保留原始的较小尺寸,那么手动减小尺寸将会保留改进后的分辨率。

png的默认设置是 dpi = 72,height = 480,width = 480。所以为了保持同样的比例,你需要把高度和宽度乘以分辨率/72。通过宽度 = 高度 = 3.25英寸和所需的分辨率 dpi 为1200的例子,我们将调整为1200/72(等于50/3) :

reso <- 1200
length <- 3.25*reso/72
png("test.png",units="in",res=reso,height=length,width=length)
par(mar=c(5,5,2,2),xaxs = "i",yaxs = "i",cex.axis=1.3,cex.lab=1.4)
plot(perf,avg="vertical",spread.estimate="stddev",col="black",lty=3, lwd=3)
dev.off()