【问题标题】:R plot: size and resolutionR图:大小和分辨率
【发布时间】:2017-02-23 22:11:36
【问题描述】:

我陷入了这个问题:我需要使用 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()

但是当我应用此代码时,图像变得非常糟糕,它没有缩放(适合)到所需的大小。我错过了什么?如何将图像“拟合”到情节?

,

【问题讨论】:

  • 首先,减少cex.axis和cex.lab的值
  • 您可能需要调整png 的pointsize 参数,因为这似乎与res 成比例。
  • pointsize - 确实有帮助,但是轴名称的大小真的很小(几乎不可见)
  • @chupvl 您可能需要使用它来权衡易读性和这些元素消耗的绘图画布的数量

标签: r png plot


【解决方案1】:

一个可重现的例子:

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

James 建议使用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
)

【讨论】:

  • 非常感谢!您的解决方案效果很好!但我想知道 - 为什么 ylab、xlab 缩小了它的大小?
  • 很好,不知道你可以这样使用 ggsave。非常方便。
  • 喜欢 ggplot 解决方案 (+1)。不过对于ggsave,似乎width/height 的作用并不大,而是dpi 设置控制了大小。在我的 Windows 机器上,我通过设置 dpi=108 得到一个 3.25 英寸的正方形。dpi=1200 设置给出了一个巨大的图像。1200 是错字吗?
  • @AssadEbrahim 您创建的绘图将为width * dpi 像素宽和height * dpi 像素高。图像在屏幕上显示的大小取决于您的查看软件。如果它很聪明,它将识别预期的宽度和高度,并重新缩放图像以显示为适当的大小。如果没有,它将显示一个非常大的图像。请注意,只有当您想将图像打印到纸上时,1200 dpi 才真正有意义:显示器分辨率不会那么高,但照片打印机可以。
【解决方案2】:

如果您想使用基本图形,可以查看this。摘录:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 2012-08-17
    • 2016-03-13
    • 1970-01-01
    相关资源
    最近更新 更多