【发布时间】: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 行。为此编写一个loop或apply类型的函数不会太难。 -
@Nate:是的,这可能是一个解决方案。然后我必须检查边框和填充表面的比例是否可以很好地看到。
-
@CCurtis:是的,你解决了这个问题。我会看看
loop和apply。但由于我是 R 本身的新手,也许您可以提供代码建议... :) -
您只需从
read.table()中删除 sep = "\t" 即可正常读取