我正在使用以下代码绘制多边形。我需要绘制没有颜色的多边形,所以我将#FFFFFF保留为最后一列中的颜色代码。但是当我使用下面的R代码来装置多边形时,我会得到黑色。
data<-read.table("data.txt",sep="\t");
x1<-data$V1
x2<-data$V3
x3<-data$V5
x4<-data$V7
y1<-data$V2
y2<-data$V4
y3<-data$V6
y4<-data$V8
color<-data$V9
xx<-c(x1,x2,x3,x4)
yy<-c(y1,y2,y3,y4)
xmin<-min(x1,x2,x3,x4)
xmax<-max(x1,x2,x3,x4)
ymin<-min(y1,y2,y3,y4)
ymax<-max(y1,y2,y3,y4)
jpeg("myplot.jpg")
plot(xx,yy, type='n',xlim=c(xmin, xmax), ylim=c(ymin, ymax), xaxt='n', ann=FALSE, yaxt='n')
for (i in 1:nrow(data))
{
xx=c(x1[i],x2[i],x3[i],x4[i])
yy=c(y1[i],y2[i],y3[i],y4[i])
polygon(xx, yy, col=color[i], border="white", xaxt='n', ann=FALSE)
}
dev.off();
data.txt中
61573287.5 15104 61573101.5 14732 61572879 15177 61573065 15549 "#FFFFFF"
61573402.5 15334 61573287.5 15104 61573065 15549 61573180 15779 "#FFFFFF"
61573690.5 15910 61573402.5 15334 61573180 15779 61573468 16355 "#FFA500"
61573972.75 16474.5 61573690.5 15910 61573468 16355 61573750.25 16919.5 "#FFA500"
61574133 16795 61573972.75 16474.5 61573750.25 16919.5 61573910.5 17240 "#FFA500"
61574293.25 17115.5 61574133 16795 61573910.5 17240 61574070.75 17560.5 "#FFFFFF"
如何绘制空多边形?
答案 0 :(得分:1)
这是因为颜色列被解释为因子而不是字符串。一般情况下读取数据帧时会发生这种情况。
sapply(data, class)
# V1 V2 V3 V4 V5 V6 V7 V8 V9
# "numeric" "numeric" "numeric" "numeric" "numeric" "numeric" "numeric" "numeric" "factor"
如果您将一个因子作为col属性提供给绘图函数(此处为polygon
),它将使用标准调色板为数据着色。
palette()
# [1] "black" "red" "green3" "blue" "cyan" "magenta" "yellow" "gray
尝试将颜色列设置为字符,如下所示:
color <- as.character(data$V9)
然后绘制数据。
如果它对您不起作用,您必须在阅读数据时遇到一些问题或者您更改了某些内容。
以下是运行我提供的相同代码的示例:
data<-read.table("data.txt",sep="\t")
data
# V1 V2 V3 V4 V5 V6 V7 V8 V9
# 1 61573288 15104.0 61573102 14732.0 61572879 15177.0 61573065 15549.0 #FFFFFF
# 2 61573402 15334.0 61573288 15104.0 61573065 15549.0 61573180 15779.0 #FFFFFF
# 3 61573690 15910.0 61573402 15334.0 61573180 15779.0 61573468 16355.0 #FFA500
# 4 61573973 16474.5 61573690 15910.0 61573468 16355.0 61573750 16919.5 #FFA500
# 5 61574133 16795.0 61573973 16474.5 61573750 16919.5 61573910 17240.0 #FFA500
# 6 61574293 17115.5 61574133 16795.0 61573910 17240.0 61574071 17560.5 #FFFFFF
然后运行
x1<-data$V1
x2<-data$V3
x3<-data$V5
x4<-data$V7
y1<-data$V2
y2<-data$V4
y3<-data$V6
y4<-data$V8
color<-as.character(data$V9)
xx<-c(x1,x2,x3,x4)
yy<-c(y1,y2,y3,y4)
xmin<-min(x1,x2,x3,x4)
xmax<-max(x1,x2,x3,x4)
ymin<-min(y1,y2,y3,y4)
ymax<-max(y1,y2,y3,y4)
jpeg("test.jpg")
plot(xx,yy, type='n',xlim=c(xmin, xmax), ylim=c(ymin, ymax), xaxt='n', ann=FALSE, yaxt='n')
for (i in 1:nrow(data))
{
xx=c(x1[i],x2[i],x3[i],x4[i])
yy=c(y1[i],y2[i],y3[i],y4[i])
polygon(xx, yy, col=color[i], border="white", xaxt='n', ann=FALSE)
}
dev.off()