R图:大小和分辨率

chu*_*pvl 58 plot png r

我已经陷入了问题:我需要绘制DPI = 1200和特定打印尺寸的图像.

默认情况下,png看起来不错...... 在此输入图像描述

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()
Run Code Online (Sandbox Code Playgroud)

但是当我应用这个代码时,图像变得非常糟糕,它不能缩放(适合)所需的大小.我错过了什么?如何将图像"拟合"到情节中?

在此输入图像描述,

Ric*_*ton 59

一个可重复的例子:

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"
  )
}
Run Code Online (Sandbox Code Playgroud)

詹姆斯建议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()
Run Code Online (Sandbox Code Playgroud)

当然,更好的解决方案是放弃使用基本图形的这种摆弄,并使用一个能够为您处理分辨率缩放的系统.例如,

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
)
Run Code Online (Sandbox Code Playgroud)

  • 很好,不知道你可以像这样使用ggsave.非常便利. (4认同)
  • @AssadEbrahim你创建的图是'width*dpi`像素宽,'height*dpi`像素高.图像在屏幕上显示的大小取决于您的查看软件.如果它是智能的,它将识别预期的宽度和高度,并重新缩放图像以显示适当的大小.如果没有,它将显示一个非常大的图像.请注意,当您想要将图像打印到纸张时,1200 dpi才真正有意义:显示器分辨率不会那么高,但照片打印机可以. (3认同)

Fáb*_*bio 5

如果您想使用基础图形,您可以看看这个。摘录:

您可以使用 png 的 res= 参数来纠正此问题,该参数指定每英寸的像素数。该数字越小,绘图区域(以英寸为单位)越大,并且文本相对于图表本身越小。