ggplot:手动添加未映射的美学图例

Mar*_*ann 2 r ggplot2

我想生成一个用点覆盖的条形图,其中两个都有单独的图例。另外,我想使用外部参数选择条形的颜色和点的大小aes()。由于两者均未映射,因此不会生成图例。

1) 如何为填充和大小手动添加图例?

library(ggplot2)

d <- data.frame(group = 1:3,    
                prop = 1:3 )

ggplot(d, aes(x=group, y=prop)) +
  geom_bar(stat="identity", fill="red") +
  geom_point(size=5)
Run Code Online (Sandbox Code Playgroud)

这就是我想出的:我使用了虚拟映射,然后根据我的需要修改了图例。但这种方法对我来说似乎很笨拙。

2)是否有手动方式说:添加具有此标题,这些形状,这些颜色等的图例?

d <- data.frame(dummy1="d1",
                dummy2="d2",
                group = 1:3,    
                prop = 1:3 )


ggplot(d, aes(x=group, y=prop, fill=dummy1, size=dummy2)) +
  geom_bar(stat="identity", fill="red") +
  geom_point(size=5) +
  scale_fill_discrete(name="fill legend", label="fill label") +
  scale_size_discrete(name="size legend", label="size label")
Run Code Online (Sandbox Code Playgroud)

上面我映射fill到dummy1. 所以我希望scale_fill_discrete改变这个传说。但它似乎改为修改size图例。

3)我不确定这里出了什么问题。有任何想法吗?

The*_*Man 5

我不知道你为什么说“另外,我想使用 aes() 之外的参数选择条形的颜色和点的大小”。这是您正在尝试做的事情还是考虑到 ggplot 的工作方式,您必须做的事情?

如果是后者,一种解决方案如下-

library(ggplot2)

d <- data.frame(group = 1:3,    
                prop = 1:3 )

ggplot(d, aes(x=group, y=prop)) +
    geom_bar(stat="identity",aes( fill="label")) +
    geom_point(aes(size='labelsize')) +
    scale_fill_manual(breaks = 'label', values = 'red')+
    scale_size_manual(breaks = 'labelsize', values = 5)
Run Code Online (Sandbox Code Playgroud)