如何在R中绘制半填充点(最好使用ggplot)

17
我想知道是否可以使用多种颜色来填充点。例如,在散点图中,我希望看到每个点的上半部分填充某种颜色,而下半部分则填充另一种颜色。如果可能的话,我还想将每个点的填充颜色对应到一些基础数据(例如,如果数据取值为x,则某些配对类型)。到目前为止,我考虑过两次绘图,使用两个椭圆分别进行填充,但没有成功。如果有人能够帮忙,我将不胜感激。
谢谢!

2
你可能需要创建自己的几何对象。绘制两个半圆可能是一个不错的方法。 - Gregor Thomas
2
这可能会有用:https://dev59.com/32Qm5IYBdhLWcg3wyhfk - Tyler Rinker
2个回答

10
以下是接近您所要求的两个技巧:
首先,我们使用两个Unicode符号来绘制上下半圆。这些符号的优点是每个点标记的中心是由每个半圆定义的圆的共同中心,但缺点是它们都包括另一半圆的边界。因此,一个圆的轮廓覆盖了另一个圆的边缘。您可以通过在其上绘制未填充圆来“覆盖”圆形边框,但是您需要两个稍微不同大小的这样的未填充圆才能完全覆盖轮廓圆。此外,如果任何点重叠,您将看到这些轮廓圆的部分。(理想情况下,会有没有边框的Unicode填充半圆符号,其中标记的地理中心和(半)圆的中心重合,但我找不到任何这样的符号。)
library(ggplot2)

p1 = ggplot(mtcars, aes(wt, mpg)) +
  geom_point(shape="\u25D2", colour="red", size=3) +
  geom_point(shape="\u25D3", colour="blue", size=3) +
  geom_point(shape=1, colour="white", size=3.05) +
  geom_point(shape=1, colour="white", size=2.8) +
  theme_bw()

接下来,我们使用两个Unicode符号绘制半圆形的标记。另一半圆形没有边框(我只能找到并排而不是上下排列的符号)。但这些标记的缺点是,标记的中心与圆圈的中心偏移,因此必须手动调整这两个圆圈的位置,使它们互相对齐。

p2 = ggplot(mtcars) +
  geom_point(aes(wt-0.027, mpg), shape="\u25D6", colour="red", size=3) +
  geom_point(aes(wt+0.027, mpg), shape="\u25D7", colour="blue", size=3) +
  theme_bw()

在上面的图表中,我已经硬编码了颜色,但是您也可以将其映射到其他变量。
为了正确显示 Unicode 符号,我使用了带有 Symbola 字体的 Cairo PDF 设备。
cairo_pdf("p1.pdf", family="Symbola", 4,4)
p1
dev.off()

cairo_pdf("p2.pdf", family="Symbola", 4,4)
p2
dev.off()

这是图表的样子: enter image description here enter image description here

5

eipi10的第二个解决方案有以下评论:如果您使用Arial Unicode MS而不是Symbola,则水平偏移是不必要的。(感谢Laserhedvig发现这一点。) 因此,以下代码可以正常工作:

library(ggplot2)

my_plot = ggplot(mtcars) +
geom_point(aes(wt, mpg), shape="\u25D6", colour="red", size=3) +
geom_point(aes(wt, mpg), shape="\u25D7", colour="blue", size=3) +
theme_bw()

cairo_pdf("my_plot.pdf", family="Arial Unicode MS", 4,4)
my_plot
dev.off()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接