R图:大小和分辨率

R图:大小和分辨率,r,png,plot,R,Png,Plot,我已经进入了一个问题:我需要用DPI=1200和特定的打印尺寸来打印图像 默认情况下,png看起来正常。。。 但是当我应用这段代码时,图像变得非常糟糕,因为它无法缩放到所需的大小。我错过了什么?如何将图像“适合”到绘图中 ,一个可重复的示例: the_plot <- function() { x <- seq(0, 1, length.out = 100) y <- pbeta(x, 1, 10) plot( x, y, xlab = "F

我已经进入了一个问题:我需要用DPI=1200和特定的打印尺寸来打印图像

默认情况下,png看起来正常。。。

但是当我应用这段代码时,图像变得非常糟糕,因为它无法缩放到所需的大小。我错过了什么?如何将图像“适合”到绘图中


一个可重复的示例:

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"
  )
}

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

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
)
库(ggplot2)

ggplot_alternative如果你想使用基本图形,你可以看看。摘录:

您可以使用png的res=参数来纠正这一点,该参数指定每英寸的像素数。该数字越小,以英寸为单位的打印区域越大,相对于图形本身的文本越小


首先,减少
cex.axis
cex.lab
的值。您可能需要调整
png
pointsize
参数,因为这似乎与
res
成比例。pointsize-确实有帮助,但轴名称的大小非常小(几乎看不见)@chupvl您可能需要使用它,以在易读性和这些元素消耗的绘图画布数量之间进行权衡。这是非常重要的!您的解决方案非常有效!但是我想知道-为什么ylab,xlab已经缩小了它的尺寸?很好,不知道你可以像那样使用ggsave。非常方便。喜欢ggplot解决方案(+1)。不过,对于
ggsave
来说,
width/height
似乎没有太大作用,而是
dpi
设置控制了大小。在我的Windows机器上,我得到了一个3.25“通过设置dpi=108来平方。
dpi=1200
设置提供了一个巨大的图像。1200是打字错误吗?@AssadEbrahim您创建的绘图将是
width*dpi
像素宽和
height*dpi
像素高。图像在屏幕上显示的大小取决于您的查看软件。如果它是智能的,它将识别预期的宽度和高度,并重新缩放图像,使其以适当的大小显示。如果没有,它将显示一个非常大的图像。请注意,只有当您想将图像打印到纸上时,1200 dpi才真正有意义:显示器的分辨率没有那么高,但照片打印机可以。
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
)