R - geom_bar 带有分组标签的分组条形图

3

我在将一个层叠条形图和一条折线图结合起来。

以下是数据帧的可重现代码:

df1 <- data.frame(month = c("Okt 2017", "Okt 2017", "Okt 2017", "Nov 2017", "Nov 2017", "Nov 2017", "Dez 2017", 
                            "Dez 2017", "Dez 2017", "Jan 2018", "Jan 2018", "Jan 2018", "Feb 2018", "Feb 2018", "Feb 2018",
                             "Mrz 2018", "Mrz 2018", "Mrz 2018"), 
                 source = c("a", "b", "c", "a", "b", "c", "a", "b", "c", "a", "b", "c", "a", "b", "c", "a", "b", "c"),
                 value1 = c(sample (c(1000L:4000L),18, replace = FALSE))
                 )

df1$month <- as.yearmon(df1$month)
df1 <- arrange(df1, month)

第二个数据框:

df2 <- data.frame(month = c("Okt 2017", "Nov 2017", "Dez 2017", "Jan 2018", "Feb 2018", "Mrz 2018"), 
                  value2 = c(sample (c(5000000L:6000000L),6, replace = FALSE))
                  )

df2$month <- as.yearmon(df2$month)
df2 <- arrange(df2, month)

绘图的代码如下:

ggplot() +   
geom_bar(data = df1, aes(month, value1*5000000/5000, fill = source), stat="identity", position = "stack") +
geom_point(data = df2, aes(month, value2), color = "blue")+   
geom_line(data = df2, aes(month, value2), group = 1, color = "blue") +  
labs(x = "month", y="value2 (line)") +   scale_y_continuous(sec.axis = sec_axis(~.*5000/5000000, name = "value1 (bars)"), 
                     labels= format_format(big.mark = ".", decimal.mark = ",", scientific = FALSE)) +   
scale_x_yearmon(format = "%Y-%b", n = 6) +  
scale_fill_manual(values= c("darkseagreen4","darkseagreen", "darkseagreen3", "darkseagreen2")) + 
theme_light()

尽管我已经有从十月到三月的月份,但R标记了九月而没有十二月。有人知道我在这里做错了什么吗?
1个回答

1

zoo::as.yearmon 期望使用系统语言环境中的缩写月份名称(例如 Jan、Feb 等)%b

在这种情况下,您似乎正在使用德语格式的月份,但是您的语言环境不同。您可以使用以下方法检查当前设置:

Sys.getlocale()

所以其中一种方法是在运行代码之前将语言环境设置为相应的语言(或者您可以使用英文格式的月份名称数据)。
Sys.setlocale("LC_TIME", "de_DE")  #Mac
Sys.setlocale("LC_TIME", "German") #Windows

我使用 Sys.setlocale("LC_TIME", "German") 将区域设置为德语,并且 Sys.getlocale() 也确认它是德语,但在图表中仍然显示九月而不是十二月。而手动更改英文格式的名称会将维度类转换为其他格式....还有其他可能性吗? - nississippi
1
针对此问题,您可以尝试增加 scale_x_yearmon 中的 n 值 - 例如 scale_x_yearmon(format = "%Y-%b", n = 10)。(更多信息请参见 ?scale_x_yearmon - Prem
啊太好了,十二月现在出现了!!:) 不过,九月还是可见的... 不过还是谢谢十二月! - nississippi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接