【问题标题】:plot more times the same points according to a different criterion: problems of overlap根据不同的标准绘制更多次相同的点:重叠问题
【发布时间】:2017-11-17 20:45:33
【问题描述】:

假设我有很多人的地理数据(经纬度),每个人有 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 个左右)...

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

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

我的问题:如何为第一个点绘制左半边、右半边和黑色矩形,然后为第二个点绘制相同的矩形,等等,以便重叠是我想要的,即上面的点被下面的点覆盖?

【问题讨论】:

  • 用边框颜色和填充颜色代替对半策略怎么样?
  • 您的数据未正确加载。在您的数据上使用dput 并发布结果。您的数据是以这种方式绘制的,因为您第二次绘制性别矩形。仔细观察,您会看到其他性别矩形在不应该覆盖大小矩形时。该图的顺序正确,但每次调用geom_point 时都会按照该顺序运行一次。为了得到你想要的,你可以一次绘制 1 行。为此编写一个loopapply 类型的函数不会太难。
  • @Nate:是的,这可能是一个解决方案。然后我必须检查边框和填充表面的比例是否可以很好地看到。
  • @CCurtis:是的,你解决了这个问题。我会看看loopapply。但由于我是 R 本身的新手,也许您可​​以提供代码建议... :)
  • 您只需从read.table() 中删除 sep = "\t" 即可正常读取

标签: r ggplot2 colors overlap


【解决方案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"))

stroke 控制轮廓的粗细,alpha 控制点的透明度(在本例中为 80% 不透明),因此您可以判断点是否重叠。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    相关资源
    最近更新 更多