楼主: 楚韵荆风
3221 17

[问答] 请教高手:用R画下面的图形,怎样最简单? [推广有奖]

  • 4关注
  • 20粉丝

已卖:66份资源

教授

31%

还不是VIP/贵宾

-

威望
0
论坛币
2271 个
通用积分
7.6593
学术水平
54 点
热心指数
84 点
信用等级
41 点
经验
78962 点
帖子
1230
精华
0
在线时间
1281 小时
注册时间
2009-7-2
最后登录
2025-2-20

楼主
楚韵荆风 学生认证  发表于 2012-6-23 11:47:35 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
2.png
1.png
求编程高手帮忙,也请版主帮忙,看R中有没有现成的程序包可以用,我要简单一点程序,最好是能用包中的命令一下子就可以解决的,因为上面两幅图我也是用R画的,但是写的程序很复杂!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:请教高手 最简单 编程高手 程序包 有没有 图形

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
singph + 1 + 1 + 1 鼓励积极发帖讨论

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

共享是一种彼此的快乐

沙发
conquergo 发表于 2012-6-23 11:51:01
不晓得 ,静等楼主搞出
事情在时刻变化,一成不变的是心态。

藤椅
trier2006 发表于 2012-6-23 13:41:55
不知道,能自己写出程序已经很牛了。
最好的医生是自己,最好的药物是时间……

板凳
shierfeishilixu 发表于 2012-6-23 17:05:50
同样想知道,帮顶!静待解答

报纸
ltx5151 发表于 2012-6-23 23:39:48
不知道怎么做最简单,但是可以先用相应的方程划分区域,然后用contour函数填充

地板
qoiqpwqr 发表于 2012-6-24 06:15:38
不知道有啥好的简单的方法,我只会用polygon来填充

第一个

png("1.png")
t <- 0.5
TT <- 0.8
par(mar = c(5, 5, 4, 4))
plot(0:1, 0:1, axes = FALSE, type = "n", xaxs = "i", yaxs = "i", xlab = "", ylab = "", asp = 1)
arrows(0, 0, 1, 0, xpd = TRUE, lwd = 2)
arrows(0, 0, 0, 1, xpd = TRUE, lwd = 2)
text(c(-0.1, TT, -0.1, t), c(TT, -0.1, t, -0.1), labels = c("T", "T", "t", "t"), xpd = TRUE)
lines(c(-0.2, t+0.1), c(t-0.2, 2*t+0.1), xpd = TRUE, lty = 2)
lines(c(t-0.2, 2*t+0.1), c(-0.2, t+0.1), xpd = TRUE, lty = 2)
polygon(x = c(0, t, TT, TT, TT-t, 0), c(0, 0, TT-t, TT, TT, t), col = "gray", border = FALSE)
rect(0, 0, TT, TT)
mtext("x", side = 1, line = 0, at = 1)
mtext("y", side = 2, line = 1, at = 1, las = 1)
mtext("0", side = 1, line = 0, at = 0)
text(c(TT-t, 1), c(1, TT-t), labels = c("y = x + t", "y = x - t"), xpd = TRUE)
dev.off()

1.png
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
ywh19860616 + 1 + 1 + 1 厉害
aspenroad + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

7
qoiqpwqr 发表于 2012-6-24 06:16:30
第二个

png("2.png")
x1 <- 0.5
y1 <- 0.5
x2 <- 1
y2 <- 0.5
r1 <- 0.4
r2 <- 0.4
theta <- seq(0, 2*pi, length = 500)
x <- r1*cos(theta)+x1
y <- r1*sin(theta)+y1
xx <- r2*cos(theta)+x2
yy <- r2*sin(theta)+y2
plot(1, xlim = c(0, 1.5), ylim = c(0, 1.5), type = "n", asp = 1, axes = NA, )
rect(0, 0, 1.5, 1.5, col = "green")
polygon(x, y, col = "red")
polygon(xx, yy, col = "blue")
lab2 <- (xx-x1)^2+(yy-y1)^2 <= r1^2
lab1 <- (x-x2)^2+(y-y2)^2 <= r2^2
polygon(c(x[lab1][rank(y[lab1])], xx[lab2]), c(sort(y[lab1]), yy[lab2]), col = "yellow")
arrows(x1, y1, x1, y1+0.8, col = "red", lwd = 2)
arrows(x2, y2, x2, y2+0.8, col = "blue", lwd = 2)
arrows((x1+x2)/2, y1, (x1+x2)/2, y1+0.8, col = "yellow", lwd = 2)
text(c(x1, (x1+x2)/2, x2), c(y1+0.9, y1+0.9, y2+0.9), labels = c("A", "AB", "B"), col = c("red", "yellow", "blue"))
dev.off()


2.png
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
kk22boy + 2 + 2 + 2 观点有启发
aspenroad + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

8
楚韵荆风 学生认证  发表于 2012-6-24 09:21:51
qoiqpwqr 发表于 2012-6-24 06:16
第二个

png("2.png")
感谢版主,我和你写的程序类似,我觉得这样比较复杂,所以我才发帖提问。
不知道版主能不能用library(plotrix)下面的draw.circle()命令实现。
我也附上我自己写的比较复杂的程序,以供大家交流学习。
#图1:code

windows(height=4,width=4,points=9)
plot(c(-0.2,1.5),c(-0.2,1.5),type="n",axes=FALSE,xlab="",ylab="")
labels=c("t","T"); at=c(0.6,1); yat=c(0,0)-0.1
arrows(x0=0,y0=0, x1=1.4, y1=0,length=0.08, lwd=2)
text(at,yat,labels)
arrows(x0=0,y0=0, x1=0, y1=1.4,length=0.08, lwd=2)
text(yat,at,labels)
polygon(c(0,1,1,0), c(0,0,1,1))
text(-0.1,-0.1,expression(0))
abline(a=-0.6,b=1, lty=2)      # or segments()
text(1.2,0.3,expression(y==x-t),cex=1.2)
abline(a=0.6, b=1, lty=2)
text(0.5,1.4,expression(y==x+t),cex=1.2)
xnew=c(0, 0.6, 1, 1, 0.4, 0, 0)
ynew=c(0, 0, 0.4, 1, 1, 0.6, 0)
polygon(xnew,ynew, col="gray")
text(c(1.4,-0.1),c(-0.1, 1.4), c("x","y"),cex=1.2, font=4)

# 图2:code
x=seq(0,2,length=100)
y1=1+sqrt(1-(x-1)^2)
y2=1-sqrt(1-(x-1)^2)
t=1+seq(0,2,length=100)
s1=1+sqrt(1-(t-2)^2)
s2=1-sqrt(1-(t-2)^2)

x1=x[which(x>=1)]
t1=t[which(t<=2)]
a1=y2[which(x>=1)]
a2=s2[which(t<=2)]
j=which.min(abs(a1-a2))
xnew=c(x1[1:j],t1[(j+1):length(t1)])
ynew1=c(s2[1:j],y2[(100-j+1):100])
ynew2=c(s1[1:j],y1[(100-j+1):100])
windows(height=4,width=4,points=9)
plot(c(-0.3,3.7),c(-0.3,3.7),type="n",axes=FALSE,xlab="",ylab="")
polygon(c(-0.2,3.5,rev(c(-0.2,3.5))), c(-0.2,-0.2,rev(c(3,3))), col=3, border = 3)
text(3.1,2.8,expression(Omega),col=1)
polygon(c(x,rev(x)), c(y1,rev(y2)), col=2, border = 2)
polygon(c(t,rev(t)), c(s1,rev(s2)), col=4, border = 4)
polygon(c(xnew, rev(xnew)), c(ynew1,rev(ynew2)),col=7, border=7)
arrows(x0=0.6,y0=1.2,x1=0.95,y1=2.5,col=2,length=0.08)
text(1,2.7,expression(A),col=2)
arrows(x0=2.5,y0=1.1,x1=2.5,y1=2.5,col=4,length=0.08)
text(2.5,2.7,expression(B),col=4)
arrows(xnew[j],ynew2[j],xnew[j]+0.1,2.5,col=7, length=0.08)
text(xnew[j]+0.1,2.7, expression(AB),col=7)

已有 1 人评分经验 学术水平 热心指数 收起 理由
qoiqpwqr + 40 + 1 + 1 鼓励积极发帖讨论

总评分: 经验 + 40  学术水平 + 1  热心指数 + 1   查看全部评分

共享是一种彼此的快乐

9
qoiqpwqr 发表于 2012-6-24 09:32:17
楚韵荆风 发表于 2012-6-24 09:21
感谢版主,我和你写的程序类似,我觉得这样比较复杂,所以我才发帖提问。
不知道版主能不能用library(pl ...
draw.circle()可以画出两个圆形,但是中间的重叠部分没办法搞定。

10
楚韵荆风 学生认证  发表于 2012-6-24 09:37:41
qoiqpwqr 发表于 2012-6-24 09:32
draw.circle()可以画出两个圆形,但是中间的重叠部分没办法搞定。
我也正是想怎么解决公共部分的问题
共享是一种彼此的快乐

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-9 02:01