我想知道是否可以用多种颜色填充点。例如,在散点图中,我想看到每个点上半部分都填充了某种颜色,而下半部分填充了不同的颜色。如果可能的话,我还想在一些基础数据的每个点映射中建立填充颜色对(例如,如果数据取值为x,则为某些类型的配对)。到目前为止,我已经考虑过用两次日食绘制两次并分别填充,但没有运气。如果有人能提供帮助我真的很感激。
谢谢!
答案 0 :(得分:7)
以下是几个与您要求接近的黑客攻击:
首先,我们使用两个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()
以下是这些情节的样子:
答案 1 :(得分:0)
对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()