对于以下geom_circle()
示例:
library(ggplot2)
library(ggforce)
circles <- data.frame(
x0 = rep(1:3, 3),
y0 = rep(1:3, each = 3),
r = seq(0.1, 1, length.out = 9)
)
plt <- ggplot() +
geom_circle(aes(x0 = x0, y0 = y0, r = r), data = circles)
plt
它正确地生成以下图:
我想根据一个十六进制代码向量来填充各个圆,例如colors <- rep("#00FF00",9)
但是,当尝试使用以下代码操作着色时:
colors <- rep("#00FF00",9)
ggplot() +
geom_circle(aes(x0 = x0, y0 = y0, r = r), fill = colors, data = circles)
它会产生以下错误:
Error in `geom_circle()`:
! Problem while setting up geom aesthetics.
ℹ Error occurred in the 1st layer.
Caused by error in `check_aesthetics()`:
! Aesthetics must be either length 1 or the same as the data (3249)
✖ Fix the following mappings: `fill`
圆圈的数量显然是9,所以我假设实际的geom_circle()
将输入转换为一堆较小的数据点或类似的东西。在任何情况下,如何单独转换颜色?一个潜在的解决方案是迭代地添加每个圆圈,但在我的用例中,需要添加数千个圆圈。
2条答案
按热度按时间mmvthczy1#
一个选项是将颜色作为列添加到数据集中,该数据集可以Map到
fill
aes并添加scale_fill_identity
。e37o9pze2#
geom_circle()函数确实生成了大量的点来绘制每个圆,这就是为什么当您尝试将填充颜色设置为长度为9的向量时会看到错误。
为每个圆单独着色的一种方法是使用scale_fill_manual()函数手动为每个圆分配颜色。您可以通过向圆数据框添加一列来指定每个圆的颜色,然后将该列Map到geom_circle()中的填充美学来实现此操作。
下面是我的例子:
在本例中,我在circles数据框中添加了一个名为color的新列,并为每个圆分配了一个唯一的颜色。然后,在geom_circle()中,我将颜色列Map到填充美学。最后,我使用scale_fill_manual()使用颜色列中的唯一值手动为每个圆分配颜色。