根据不同的标准绘制相同点的更多次:重叠问题

时间:2017-11-17 20:45:34

标签: r ggplot2 colors overlap

假设我有很多人的地理数据(long lat),每个人有2个属性(大小和性别),我想绘制它们用长拉数据放置点,然后用双色方形,左边根据大小,右边根据性别。我使用以下技巧来管理那些2色方块(inspired from here):

library(ggplot2)
library(Cairo)

dataframe = read.table(text = 
"Lat    Long    Size    Sex
47.875  6.787   small   F
47.684  7.032   big M
47.644  6.942   small   M
47.609  7.070   big F
47.460  7.197   big F
47.508  7.110   small   F
47.442  7.006   big M
47.364  7.154   small   F
47.348  7.455   big M
47.264  7.013   big F", header = TRUE)

colors <- c("big" = "firebrick3", "small" = "dodgerblue4", "M" = "gold", "F" = "forestgreen")

g <- ggplot(data = dataframe, mapping = aes(x = Long, y = Lat)) +
        geom_point(aes (color=Size), shape="◧", size=30) +
      geom_point(aes (color=Sex), shape="◨", size=30) +
      geom_point(color="black", shape="◫", size=30) +
      scale_color_manual(values=colors, "")

g

现在假设这些点必须重叠,原因有二:由于颜色的可读性,它们不能很小,而且它们太多了(比如1000左右)... < / p>

假设我找到了令人满意的规模。这给出了以下结果。

png image of the result

问题在于点重叠的方式。我对数据进行了排序,以使较低点与较高点重叠。这只是一个选择问题。但它不能很好地工作,因为权利一半被绘制在左边的那些上面,而黑色的矩形被绘制在整个其余部分的顶部。正如人们可以在得到的图像上看到的那样,中间的绿色半部分覆盖了它下方的红色半部分,并且所有黑色矩形都显示在顶部。

我的问题:我如何绘制第一个点的左半部分,右半部分和黑色矩形,然后再绘制第二个点的相同,等等,以便重叠是我想要的,即较低点覆盖的上部点?

1 个答案:

答案 0 :(得分:1)

ggplot2中,如果将响应变量保持在不同的比例上,则更简单。这方面的一种方法是使用“填充”和“颜色”的比例和shapes(21:25)中的一个可以处理两者(具有单独轮廓和填充颜色的那些)。

ggplot(data = dataframe, mapping = aes(x = Long, y = Lat)) +
    geom_point(aes(color = Sex, fill = Size), shape = 22, size = 6, stroke = 2, alpha = .8) +
    scale_fill_manual(values = c("firebrick3", "dodgerblue4")) +
    scale_color_manual(values = c("gold", "forestgreen"))

enter image description here

stroke控制轮廓的粗细,alpha控制点的透明度(在这种情况下为80%不透明),这样就可以判断点是否重叠。