ggplot2 绘制两个图例

Posted

技术标签:

【中文标题】ggplot2 绘制两个图例【英文标题】:ggplot2 draws two legends 【发布时间】:2013-02-28 12:18:57 【问题描述】:

我几乎完成了下面的图表,但它有一个问题。

图表中的图例绘制了两次。

这是数据:

structure(list(Period = c("January 1997 - August 2003", "September 2003 - Jun 2005", 
"Jul 2005 - Dec 2009", "January 1997 - August 2003", "September 2003 - Jun 2005", 
"Jul 2005 - Dec 2009"), Time.Period = structure(c(1L, 3L, 2L, 
 1L, 3L, 2L), .Label = c("Jan 1997 - Aug 2003", "Jul 2005 - Dec 2009", 
 "Sep 2003 - Jun 2005"), class = "factor"), Variable = structure(c(2L, 
 2L, 2L, 1L, 1L, 1L), .Label = c("Significant", "Zscore"), class = "factor"), 
 Score = c(8.798129, 4.267268, 7.280275, 1.64, 1.64, 1.64)), .Names = c("Period", 
 "Time.Period", "Variable", "Score"), class = "data.frame", row.names = c(NA, 
 -6L))

ggplot(glomor, aes(x=Time.Period, y=Score, group=Variable, shape=Variable, color=Variable)) +
 geom_point() +
 guides(fill=FALSE) +
 scale_x_discrete(limits=c("Jan 1997 - Aug 2003","Sep 2003 - Jun 2005","Jul 2005 - Dec 2009"),    expand=c(.08,0)) +
  geom_line(aes(linetype=Variable), size=1.5) +
  geom_point(size=4.2) +
  scale_linetype_manual(values=c(1,3)) +
  scale_color_manual(values=c("black", "grey40"), name="", labels=c("Signficant Z-Score",   "Moran's I Z-Score")) +
  scale_fill_discrete(name="", label=c("Signficant Z-Score", "Moran's I Z-Score")) +
  theme_classic()+
  ylim(0,10) +
  xlab("Time Periods") +
  ylab("Moran's I Z-Score") +
  theme(axis.title.x=element_text(size=14)) +
  theme(axis.title.y=element_text(size=14)) +
  theme(legend.position=c(.75, .85)) +
  theme(legend.background = element_rect(fill="white")) +
  theme(legend.key = element_blank())

有谁知道,为什么 ggplot2 会产生两个图例?

【问题讨论】:

请使用dput(your_data) 并粘贴输出。 scale_color 中,您将比例名称设置为"",但颜色和形状比例必须相同才能合并为一个。 或者我相信guides( guide = "none" ) 也可以? @Arun 我没有权限粘贴图片,本例是输出 @SimonO101 我之前尝试过使用指南,但没有成功 【参考方案1】:

您拥有映射到Variable 的三种美学:形状、颜色和线型。当图例具有相同的标题和标签时,它们会折叠在一起。您已将颜色的标题设置为空白,并为其指定了自定义标签(“显着 Z 分数”和“莫兰 I Z 分数”)。您还需要对线型和形状执行此操作,以使它们一起折叠。

改变

scale_linetype_manual(values=c(1,3)) +

scale_linetype_manual(values=c(1,3), name="", labels=c("Signficant Z-Score",   "Moran's I Z-Score")) +

并添加

scale_shape_discrete(name="", label=c("Signficant Z-Score", "Moran's I Z-Score")) +

(你也可以去掉scale_fill_discrete,因为你实际上并没有在任何地方使用填充美学。)

这给了

【讨论】:

非常感谢。既然看到了答案,直觉上就说得通了。

以上是关于ggplot2 绘制两个图例的主要内容,如果未能解决你的问题,请参考以下文章

在ggplot2中的图表下方绘制图例和图例标题上方的图例

ggplot2:从列表和常见图例中在多个页面上绘制图形

ggplot2密度图图例显示错误的组名和错误的颜色

R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(设置图例位置移除图例)实战

R语言使用ggplot2包使用geom_density()函数绘制分组密度图(改变图例位置移除图例)实战(density plot)

ggplot2 - 在大小图例中显示多个键(形状)