r - 如何在 ggplot2 条形图中添加图例

标签 r ggplot2

我试图通过使用条形显示某些时期的不同值,在 ggplot2 中设计一个漂亮的图表。我得到了图形,但无法在图形的右侧添加图例。我的数据框 DF有 3 个变量 Month,variable,value .这些变量是 melt() 的结果另一个数据中的函数(我在最后一部分添加了 dput()DF 版本)。所以,我的数据框 DF看起来像这样:

   Month variable     value
1     m2    Power 1258978.9
2     m3    Power 1608317.4
3     m4    Power 1293821.1
4     m5    Power 1819283.8
5     m6    Power 1436552.9
6     m7    Power  875170.3
7     m8    Power 1315856.2
8     m9    Power  710004.3
9    m10    Power  889398.1
10   m11    Power 1114883.1
11   m12    Power 1419242.1
12   m13    Power 1585857.2
13   m14    Power 1010455.6
14   m15    Power 1292333.4

展示value的演变变量 month我用过这个

library(ggplot2)
library(scales)
ggplot(DF, aes(x=Month, y=value))
    +geom_bar(position="identity",fill="#FF6C91",colour="black",size=1)
    +scale_y_continuous(
        labels=comma,
        breaks=pretty_breaks(n=7),
        limits=c(0,max(DF$value,na.rm=T))
    )
    +theme(
        axis.text.x=element_text(angle=90,colour="grey20",face="bold",size=12),
        axis.text.y=element_text(colour="grey20",face="bold",hjust=1,vjust=0.8,size=15),
        axis.title.x=element_text(colour="grey20",face="bold",size=16),
        axis.title.y=element_text(colour="grey20",face="bold",size=16)
    )
    +xlab('Month')
    +ylab('')
    +ggtitle("My graph")
    +theme(plot.title = element_text(lineheight=3, face="bold", color="black",size=24))
    +theme(legend.text=element_text(size=14),legend.title=element_text(size=14))

使用这段代码,我得到了下一个图形:
enter image description here

结果几乎是完美的,但我不知道如何在图形右侧添加具有相同颜色条形图的图例,以在此图像中提供更多信息。我试图添加 fill内部争论geom_bar但我无法得到我想要的结果。 dput() DF 的版本接下来是:
DF=structure(list(Month = c("m2", "m3", "m4", "m5", "m6", "m7", 
"m8", "m9", "m10", "m11", "m12", "m13", "m14", "m15"), variable = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "Power", class = "factor"), 
    value = c(1258978.86, 1608317.42, 1293821.14, 1819283.78, 
    1436552.93, 875170.34, 1315856.24, 710004.35, 889398.08, 
    1114883.11, 1419242.11, 1585857.22, 1010455.56, 1292333.35
    )), .Names = c("Month", "variable", "value"), row.names = c(NA, 
-14L), class = "data.frame")

非常感谢您的帮助。

最佳答案

您只需要制作 aes 的填充部分主题映射:

gg <- ggplot(DF, aes(x=Month, y=value))
gg <- gg + geom_bar(stat="identity", aes(fill=variable), colour="black", size=1)
gg <- gg + scale_y_continuous(labels=comma, breaks=pretty_breaks(n=7),
                              limits=c(0, max(DF$value,na.rm=T)))
gg <- gg + scale_fill_manual(values="#FF6C91", name="Legend name")
gg <- gg + labs(x="Month", y="", title="My graph")
gg <- gg + theme(plot.title=element_text(lineheight=3, face="bold", color="black", size=24))
gg <- gg + theme(legend.text=element_text(size=14), legend.title=element_text(size=14))
gg <- gg + theme(axis.text.x=element_text(angle=90, colour="grey20", face="bold", size=12), 
                 axis.text.y=element_text(colour="grey20", face="bold", hjust=1, vjust=0.8, size=15),
                 axis.title.x=element_text(colour="grey20", face="bold", size=16),
                 axis.title.y=element_text(colour="grey20", face="bold", size=16))
    gg

enter image description here

注意:我更改了 position="identity"stat="identity" (我认为你可能只是错误粘贴,因为你确实让它工作了),重新构建了 ggplot 以使其更容易修改(程序员的偏好,没有必要让它工作)然后在映射填充美学后进行手动缩放到变量(您也可以在那里重命名图例标题,如图所示)。这是自动启用图例的映射。我还扔了一个 theme_bw()呼吁采取良好的措施(并消除灰色背景)。

我会将 x 轴标签旋转回水平,但也不想强加它。通常不建议让人们歪头阅读标签,但因为他们只是 m 's 和数字,它可能不会那么难。

可能值得对条形进行排序(从最低到最高,反之亦然),除非您需要按照它们在 x 轴上的方式进行排序(即 m10 - m9 现在的顺序很重要)。

关于r - 如何在 ggplot2 条形图中添加图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25584637/

相关文章:

r - 更改级别时如何保持 NA

R ggplot 改变堆积条形图中一个变量的颜色

r - Rbrewer 调色板元素的颜色名称

r - ggplot2 : bubbles representing propotions by category?

r - ggplot 扩展图例颜色条

r - 在 OSX 上通过 R 解决方法发送 Outlook 电子邮件

r - 在 data.table 中对因子级别进行分组

r - 如何对Matrix包中的“sparseMatrix”类的对象进行QR分解?

r - 如何制作一串ggplots并在它们之间绘制箭头?

r - 有没有更简单的方法来访问R中的类的属性,可以使用点表示法吗?