2015-10-16 80 views
2

我在学习R,想绘制一个大型数据框(~55000行)的散点图。我使用的是scatterplotcar如何在R中绘制分层散点图?

library(car) 
d=read.csv("patches.csv", header=T) 
scatterplot(energy ~ homogenity | label, data=d, 
    ylab="energy", xlab="homogenity ", 
    main="Scatter Plot", 
    labels=row.names(d)) 

其中patches.csv包含数据帧(下)

我想以不同的方式显示两个label套。有了大量的数据,情节非常密集,所以我得到了正确的结果(主要是红色数据可见)。图像需要一段时间才能渲染,因此我可以在最后一个图中隐藏黑色标记数据之前(左下角)。

Figure

我可以控制R键用红色第一绘制数据,或者是有没有更好的方式来实现我的目标?

这里是我的数据样本:

label,channel,x,y,contrast,energy,entropy,homogenity 
1,21,460,76,0.991667,0.640399,0.421422,0.939831 
1,22,460,76,0.0833333,0.62375,0.364379,0.969445 
1,23,460,76,0.129167,0.422908,0.589938,0.935417 
1,24,460,76,0,1,0,1 
1,25,460,76,0,1,0,1 
1,26,460,76,0.0875,0.789627,0.253649,0.967361 
1,27,460,76,2.4,0.528516,0.700859,0.845558 
1,28,460,76,0.120833,0.562066,0.392998,0.945139 
1,29,460,76,0.0125,0.975234,0.0329461,0.99375 
1,30,460,76,0,1,0,1 
1,31,460,76,0.1625,0.384662,0.5859,0.929861 
0,0,483,82,0.404167,0.309505,0.61573,0.947222 
0,1,483,82,0.0166667,0.728559,0.221967,0.991667 
0,2,483,82,0,1,0,1 
0,3,483,82,0.416667,0.327083,0.644057,0.940972 
0,4,483,82,0.0208333,0.919054,0.0940364,0.989583 
0,5,483,82,0.416667,0.327083,0.644057,0.940972 
0,6,483,82,0,1,0,1 
0,7,483,82,0.0333333,0.794479,0.192471,0.983333 
0,8,483,82,0,1,0,1 
0,9,483,82,0,1,0,1 
0,10,483,82,0.0208333,0.958984,0.0502502,0.989583 
+0

您是否尝试过半透明颜色?这是_overplotting_的一个常见方法:我认为'car :: scatterplot'的参数是'col = adjustcolor(palette()[1:2],.5)'。 – lukeA

+1

尝试使用'ggplot',看看'geom_point(...,alpha = 0.3)',也许'facet_grid()'。 – zx8754

回答

1

如果你想改变颜色的顺序,参数传递给col=2:1scatterplot,那么你就可以绘制之前黑红。您可以使用scales包装中的功能alpha使您的点半透明(它需要颜色和alpha值的向量,以使每种颜色的密度不同)。

## More data 
d <- data.frame(homogeneity=(x=rnorm(10000, 0.85, sd=0.15)), 
       label=factor((lab=1:2)), 
       energy=rnorm(10000, lab^1.8*x^2-lab, sd=x)) 

library(car) 
library(scales)   # for alpha 
opacity <- c(0.3, 0.1) # opacity for each color 
col <- 1:2    # black then red 
scatterplot(energy ~ homogeneity | label, data=d, 
      ylab="energy", xlab="homogenity ", 
      main=paste0(palette()[col], "(", opacity, ")", collapse=","), 
      col=alpha(col, opacity), 
      labels=row.names(d)) 

enter image description here

+0

我想以不同的顺序绘制数据,所以稀疏数据绘制在密集的图上。颜色本身在这一点上并不重要 – cdmh

+0

@cdmh你只需要改变'col'变量,例如'col = 2:1'应该首先绘制红色,然后绘制黑色。往上看。您只需要将与稀疏数据对应的颜色最后保存在“col”向量中。 – jenesaisquoi

0

类似阿尔法说什么废话,

如果你有很多的点,各个点的实际确定不再有意义。相反,你可能想要一个密度的表示。为此使用smoothScatter(x,y)并使用通常的points(morex,morey)覆盖突出显示的点。您显然知道如何使用点(与绘图相同的参数),因此您可以很容易地实现,并且只需要很少的额外知识。