2013-03-15 59 views
7

使用R,我绘制了类似于this的阴影线。我想要做以下4件事R有关图的一般问题

  1. 添加图例如链接所示。
  2. 用德尔塔的希腊符号替换x轴名称
  3. 提示图上的各个交点。例如,在x = 0.75时,有几条曲线符合x轴,我想将0.75的值放在该点附近。
  4. 如果看到曲线,它们不光滑。如何让他们顺利?即使excel绘制更平滑的曲线。

如何实现这一目标?

这是情节。

plot

下面的代码是用于绘制曲线。

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 
a2 <- curve((x^2+x^3-x-x^5)/(x+x^2), to=0.9, n=45000, add = TRUE) 
a3 <- curve((x+x^7-x^2-x^4)/(1+x-x^2-x^3-x^4+x^7),from=0, n=45000, add = TRUE) 
a4 <- curve((x+x^8-x^3-x^5)/(x+x^8-x^3-x^5+1-x^4),from=0, to=0.9, n=45000, add = TRUE) 
a5 <- curve((x+x^8-x^3-x^5)/(1+x-x^5-x^4),from=0, n=45000, add = TRUE) 
a6 <- curve((x+x^2-x^4-1)/(x-x^4), to=0.84, n=45000, add = TRUE) 
a7 <- curve((x+x^6-x^3-x^4)/(1+x-x^3-x^4), from=0.83 ,to=1, n=45000, add = TRUE) 
a8 <- curve((1+x^7-x^2-x^4)/(1+x^3-x-x^4), from=0.819, n=45000, add = TRUE) 
a9 <- curve((x)/(1+x), n=45000,from=0.819, to =1, add = TRUE) 


names(a1) <- c('xA1','yA1') 
names(a2) <- c('xA2','yA2') 
names(a3) <- c('xA3','yA3') 
names(a4) <- c('xA4','yA4') 
names(a5) <- c('xA5','yA5') 
names(a6) <- c('xA6','yA6') 
names(a7) <- c('xA7','yA7') 
names(a8) <- c('xA8','yA8') 
names(a9) <- c('xA9','yA9') 


with(as.list(c(a1,a2,a3,a4,a5,a6,a7,a8,a9)),{ 

idA <- yA3 >=0 
idB <- yA2 >=0 & yA2 <= yA4 
idC <- yA4 >= yA2 

idD <- yA5 >=0 

idE <- yA6 >=0 & yA6 <= yA7 
idF <- yA7 <= yA6 

idG <- yA8 >=0 & yA8 <= yA9 
idH <- xA9 >= xA8 & xA9 >0.8 

idI <- xA1 >=0 & xA1 <= 0.755 
idJ <- xA3 >=0 & xA3 <= 0.755 



polygon(x = c(xA3[idA],xA2[idB],rev(xA4[idC])), 
     y = c(yA3[idA],yA2[idB],rev(yA4[idC])), 
     density=20, angle=90, border=NULL) 

polygon(x = c(xA5[idD],1,1,0), 
     y = c(yA5[idD],0,1,1), 
     density=20, angle=0, border=NULL) 

polygon(x = c(xA6,xA7), 
     y = c(yA6,yA7), 
     density=20, angle=45, border=NULL) 

polygon(x = c(rev(xA8[idG]),xA9[idH],1), 
     y = c(rev(yA8[idG]),yA9[idH],0), 
     density=20, angle=135, border=NULL) 

polygon(x = c(xA1[idI],rev(xA3[idJ])), 
     y = c(yA1[idI],rev(yA3[idJ])), 
     col="black", border=NULL) 


}) 
+3

你不能真的希望答案从发布这个?添加一些如何绘制图形的细节。如何添加图例将取决于你用什么来绘制你的图(网格,网格,底座等) – 2013-03-15 12:03:02

+0

你为什么不把它添加到这个问题? http://stackoverflow.com/questions/15385063/easiest-way-to-plot-inequalities-with-hatched-fill – JT85 2013-03-15 12:19:31

+3

伟大的编辑和不错的图形。 +1,以获得清晰,可重现的问题。今后,请考虑以这种方式构思您的所有问题。 – 2013-03-15 12:37:41

回答

10
layout(matrix(c(1,2),nrow=1), 
     width=c(4,1)) #Divide your plotting region in two inequal part 
par(mar=c(5,4,4,0)) #Get rid of the margin on the right side 
plot(NA,xlim=c(0,1),ylim=c(0,1), 
    xlab=expression(delta),ylab="K", xaxs="i",yaxs="i") # Here's your delta 
a1 <- curve((x+x^7-x^2-x^4)/(1+x-x^3-x^4), from=0, n=450000, add = TRUE) 

... 

par(mar=c(5,0,4,2)) #No margin on the left side 
plot(c(0,1),type="n", axes=F, xlab="", ylab="") #Empty plot 
legend("top",legend=c("1","2","3","4","5"), 
     density=c(20,20,20,20,NA), angle=c(90,0,45,135,NA), 
     col=c(NA,NA,NA,NA,"black"), bty="n", cex=1.5) 

enter image description here

至于要标记的点,或者使用功能text(或mtext)做 “programmaticaly” 或locator以交互方式做到这一点。

编辑:或者(正如我在评论中说的),这将工作,以及把你的传奇绘图区之外,可能是简单的:

par(mar=c(5,4,4,8)) 
plot(NA,xlim=c(0,1),ylim=c(0,1), 
    xlab=expression(delta),ylab="K", xaxs="i",yaxs="i") # Here's your delta 
    a1 <- curve((x+x^7-x^2-x^4)/(1+x-x^3-x^4), from=0, n=450000, add = TRUE) 

... 

legend(1,1,legend=c("1","2","3","4","5"), 
    density=c(20,20,20,20,NA), angle=c(90,0,45,135,NA), 
    col=c(NA,NA,NA,NA,"black"), bty="n", cex=1.5, xpd=TRUE) 
+2

+1!你真棒!我忘了布局! – agstudy 2013-03-15 12:41:55

+0

谢谢!在这里使用'layout'的替代方法可能是增加右边距(例如'par(mar = c(5,4,4,8))')并使用参数'xpd = TRUE'绘制图例外: legend(1,1,legend = ...,xpd = TRUE)' – plannapus 2013-03-15 12:50:36

+0

其实我想我会改变我的答案,因为它是一种更简单的解决方案。 – plannapus 2013-03-15 13:02:53

8

传统的图形系统提供了图例()函数用于添加 图例或键的曲线图。该图例通常绘制在绘图区域 中,并且相对于用户坐标而定位。

的功能有很多争论,在这里我们需要使用角度密度参数来区分散列地区。

legend(0.5, 0.8, paste("region", 1:5), 
     density=c(20,20,20,20,0), 
     angle=c(90,0,45,135,0)) 

enter image description here

+0

很快。如何将黑色区域添加到图例中?还有,如何将传奇放在剧情区域之外? – 2013-03-15 12:31:07

+0

超出阴谋区域?你的意思是左边还是右边? – agstudy 2013-03-15 12:32:24

+0

最好在底部,否则是正确的。也可以将图例从“从上到下”从左到右写成“? – 2013-03-15 12:38:12