假设我有很多人的地理数据(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>
假设我找到了令人满意的规模。这给出了以下结果。
问题在于点重叠的方式。我对数据进行了排序,以使较低点与较高点重叠。这只是一个选择问题。但它不能很好地工作,因为权利一半被绘制在左边的那些上面,而黑色的矩形被绘制在整个其余部分的顶部。正如人们可以在得到的图像上看到的那样,中间的绿色半部分覆盖了它下方的红色半部分,并且所有黑色矩形都显示在顶部。
我的问题:我如何绘制第一个点的左半部分,右半部分和黑色矩形,然后再绘制第二个点的相同,等等,以便重叠是我想要的,即较低点覆盖的上部点?
答案 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"))
stroke
控制轮廓的粗细,alpha
控制点的透明度(在这种情况下为80%不透明),这样就可以判断点是否重叠。