8

使用R,我绘制了一个阴影图。如果你看到曲线,它们并不平滑。如何使它们光滑?即使是 excel 也能绘制出更平滑的曲线。设备特性:windows 7,屏幕分辨率=1366 x 768(最大)

这是情节。

阴谋

以下代码用于绘制绘图。

plot(NA,xlim=c(0,1),ylim=c(0,1),xlab="delta",ylab="K", xaxs="i",yaxs="i") # Empty plot
a1 <- curve((x+x^7-x^2-x^4)/(1+x-x^3-x^4), from=0, n=450000, add = TRUE) # First curve

完整代码可在此处获得

4

3 回答 3

9

目前,您的绘图看起来参差不齐,不是因为曲线本身,而是因为您的屏幕显示方式。

@Hemmo 建议通过使用矢量图形格式而不是光栅格式来解决此解决方案。这是最好的解决方案,但如果您迫切需要使用光栅格式,则可以使用抗锯齿。

抗锯齿意味着绘图在线条周围绘制了一些灰色绒毛,因此它们看起来就像人眼弯曲的一样。如果放大抗锯齿图像,您会很容易看到这一点。目前:

png("no-alias.png")
# Your code
dev.off()

在此处输入图像描述

cairographics 提供抗锯齿功能。因此,将其用作以下选项png

png("alias.png", type="cairo")
# Your code again
dev.off()

在此处输入图像描述

于 2013-03-16T11:17:16.220 回答
5

我相当肯定,如果您将图形绘制为 pdf 格式,曲线是完全平滑的。这是 Rgui 的内部显示器,它显示曲线不平滑,在上面使用复制粘贴可能会导致问题。最好直接绘制到文件中,如下所示:

# Open device:
pdf("D:/test.pdf") #change for appropriate file path
plot(NA,xlim=c(0,1),ylim=c(0,1),xlab="delta",ylab="K", xaxs="i",yaxs="i")
a1 <- curve((x+x^7-x^2-x^4)/(1+x-x^3-x^4), from=0, n=450000, add = TRUE)
dev.off() #close device

现在看一下pdf,它看起来完全没问题。如果您想要例如 jpg 图像、使用函数jpeg等,请参阅?jpeg有关如何保存为 tiff、jpeg、png 或 bmp 以及图像大小、分辨率等参数的更多详细信息。

(注意,这里使用的术语设备等可能并不完全正确,我对这个术语并不完全熟悉,如果合适的话,更聪明的人可以编辑)。

于 2013-03-16T10:24:53.647 回答
2

我不确定您的问题是否存在(在您显示的图中不清楚),但您可以通过对您的点进行三次(或 Hermite)样条插值来改善。这里有一些使用spline和的选项splinefun

在此处输入图像描述

layout(matrix(c(1,2,3),nrow=3,byrow=TRUE))
plot(NA,xlim=c(0,1),ylim=c(0,0.2),xlab="delta",ylab="K", xaxs="i",yaxs="i",
     main='orginal plot with 45000 points') # Empty plot
a1 <- curve((x+x^7-x^2-x^4)/(1+x-x^3-x^4), from=0, n=45000, add = TRUE)
x <- seq(0,1,length.out=1000)
y <- (x+x^7-x^2-x^4)/(1+x-x^3-x^4)
f <- splinefun(x, y)
plot(NA,xlim=c(0,1),ylim=c(0,0.2),xlab="delta",ylab="K", xaxs="i",yaxs="i",
     main='splinefun plot with 1000 points') 
curve(f(x),0, 1, col = "green", lwd = 1.5,add=TRUE)
plot(NA,xlim=c(0,1),ylim=c(0,0.2),xlab="delta",ylab="K", xaxs="i",yaxs="i",
     main='spline plot with 1000 points') 
lines(spline(x,y), col = 2)
于 2013-03-16T10:40:03.360 回答