我试图通过使用条形显示某些时期的不同值,在 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))
使用这段代码,我得到了下一个图形:
结果几乎是完美的,但我不知道如何在图形右侧添加具有相同颜色条形图的图例,以在此图像中提供更多信息。我试图添加
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
注意:我更改了
position="identity"
至 stat="identity"
(我认为你可能只是错误粘贴,因为你确实让它工作了),重新构建了 ggplot 以使其更容易修改(程序员的偏好,没有必要让它工作)然后在映射填充美学后进行手动缩放到变量(您也可以在那里重命名图例标题,如图所示)。这是自动启用图例的映射。我还扔了一个 theme_bw()
呼吁采取良好的措施(并消除灰色背景)。我会将 x 轴标签旋转回水平,但也不想强加它。通常不建议让人们歪头阅读标签,但因为他们只是
m
's 和数字,它可能不会那么难。可能值得对条形进行排序(从最低到最高,反之亦然),除非您需要按照它们在 x 轴上的方式进行排序(即
m10
- m9
现在的顺序很重要)。
关于r - 如何在 ggplot2 条形图中添加图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25584637/