【问题标题】:How to make ggplot legend exactly reflect appearance of bars如何使ggplot图例准确反映条形图的外观
【发布时间】:2017-06-01 22:57:38
【问题描述】:

我有一个带有分组条形的 ggplot 条形图。每个 x 值有 4 个条形,条形填充、颜色和 alpha 由数据中的变量决定。我希望我的图例能够准确地反映情节中条形的外观。不幸的是,我没有足够的声誉来发布我的情节图片,但这是我的代码:

ggplot(all_frame_freq, aes(x = Frame, y = prop_type, group = interaction(speaker,Type), fill = Type, color = Type, alpha = speaker)) +  
  geom_bar(position = "dodge", stat="identity") +
  scale_fill_manual(values = c("#E41A1C","#377EB8"), name="Type", labels=c("A","B")) +
  scale_color_manual(values = c("#E41A1C","#377EB8"), guide=FALSE) +
  scale_alpha_manual(values = c(.2, 1), name="speaker", labels=c("1", "2"))

这会在所有条形周围创建一条线,但该线仅显示在 alpha

theme(legend.key = element_rect(color = 'black', size = 0.5))

但这会在所有图例框周围添加一条线。有没有办法将它添加到 alpha 图例中的一个框中,或者(可能更容易)添加到 alpha 图例中,我可以在其中设置线条颜色以匹配较暗的框?我一直在尝试各种方法并四处寻找想法,但尚未找到合适的解决方案。

我的数据样本 - 这次格式正确:

structure(list(Type = structure(c(1L, 1L, 2L, 2L, 1L, 1L, 2L, 
2L), .Label = c("A", "B"), class = "factor"), Frame = structure(c(1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("V CP", "V NP"), class = "factor"), 
prop_type = c(0.209513024, 0.138731597, 0.017167382, 0.387528402, 
0.437998087, 0.144086707, 0.042695836, 0.398376853), speaker = structure(c(1L, 
1L, 2L, 2L, 1L, 1L, 2L, 2L), .Label = c("Speaker1", "Speaker2"
), class = "factor")), .Names = c("Type", "Frame", "prop_type", 
"speaker"), class = "data.frame", row.names = c(NA, -8L))

【问题讨论】:

  • 您知道,我们没有您的数据 all_frame_freq,因此我们无法重新创建您的图片。请通过键入dput(all_frame_freq) 并将输出粘贴到您的问题中向我们展示数据
  • 我的错 - 刚刚添加。
  • 请提供一个可重现的例子,“添加的数据”是不可重现的。如需帮助,请参阅here
  • 对不起,我想我现在已经正确添加了。

标签: r plot ggplot2 bar-chart legend


【解决方案1】:

[C]目前,扬声器图例仅显示一个浅灰色框,表示 1 和深色 2 的灰色框,我不知道如何在 仅限浅灰色框。

你可以的

ggplot(all_frame_freq, aes(x = Frame, y = prop_type, group = interaction(speaker,Type), fill = Type, color = Type, alpha = speaker)) +  
  geom_bar(position = "dodge", stat="identity") +
  scale_fill_manual(values = c("#E41A1C","#377EB8"), name="Type", labels=c("A","B")) +
  scale_color_manual(values = c("#E41A1C","#377EB8"), guide=FALSE) +
  scale_alpha_manual(values = c(.2, 1), name="speaker", labels=c("1", "2")) + 
  guides(alpha = guide_legend(override.aes = list(color = c("red", NA))))

【讨论】:

  • 如果我将颜色设置为黑色而不是红色,这完全符合我的需要。 (另外,我的情节没有堆叠条,但这没关系。)我曾在某个时候尝试过 override.aes 但无法找出正确的语法。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
  • 2013-06-02
  • 1970-01-01
相关资源
最近更新 更多