如何在R中绘制像素精确图

时间:2014-03-18 19:51:52

标签: r plot pixel

我想将矩阵表示为图像,因此我想使用该图,就好像每个像素都是矩阵中的一个单元格一样。但由于某种原因,我不能。首先我画在屏幕上,分辨率以英寸为单位。所以我改为直接在PNG图像中绘制,其中分辨率以像素为单位指定,但结果几乎相同!

以下代码

png(file="graf.png",width=1000,height=100)
par(mar=c(0,0,0,0))
plot(NULL,xlim=c(1,1000),ylim=c(1,100))
for (i in 1:100) {
    p1 <- i
    range <- i
    p2 <- p1+range
    segments(p1,i,p2,i)
}
dev.off()

给了我这个形象:

enter image description here

我们可以看到黑色三角形上方有一个白色边缘,我认为它不应该存在,因为所有高度都是100.并且所有图像周围都有黑色边框,我认为它不应该存在无论是。并且三角形不是“平滑的”,双方应该是完全笔直的,但在某些点上有“休息”,好像某些“四舍五入”在某个地方。这是为什么?为什么三角形的底角远离图像的角落?毕竟最终图像是1000x100像素!

还有一件事:如果可能的话,我宁愿在屏幕上绘制整个过程,在那里我可以看到它,并且最后只保存为PNG。 (除非直接PNG抽签更快。)

1 个答案:

答案 0 :(得分:1)

该边框是您创建的图表周围的框。因为您将边距设置为0,所以绘图的其余部分(即轴刻度和标签)位于窗口之外。您也可以使用axes=F删除该框。关于底部和顶部附近的白线:默认情况下,plot会略微扩展限制。要禁用此功能,请使用xaxs='i'yaxs='i'。您可以在?par

中找到所有这些内容
par(mar=c(0,0,0,0))
plot(NULL,xlim=c(1,1000),ylim=c(1,100), type='n', axes=F, yaxs='i',xaxs='i')
for (i in 1:100) {
  p1 <- i
  range <- i
  p2 <- p1+range
  segments(p1,i,p2,i)
}

result

相关问题