在多边形绘制过程中白色变黑

时间:2015-11-05 10:27:33

标签: r polygon

我正在使用以下代码绘制多边形。我需要绘制没有颜色的多边形,所以我将#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"

enter image description here

如何绘制空多边形?

1 个答案:

答案 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()

这给了我以下图片: enter image description here