r - 如何使用 R 为特定变量组合折线图和条形图
问题描述
我有一个非常直截了当的问题。我会为 var1、var2、var3 和 var4 绘制条形图,为 var5 绘制折线图。线和条应该在同一个图表中。我怎样才能让它保持与ggplot的长格式?
set.seed(1984)
start_date <- as.Date('2015-01-01')
end_date <- as.Date('2017-01-01')
date_yq <- as.Date(sample( as.numeric(start_date): as.numeric(end_date), 50,
replace = T),
origin = '1970-01-01')
var1 <- runif(50)
var2 <- runif(50)
var3 <- runif(50)
var4 <- runif(50)
var5 <- var1+var2+var3+var4
country <- c("AT","AT","AT","BE","BE","CY","CY","CY","DE","DE")
country_r <- rep(country, times = 5)
df <- data.frame(date_yq, country_r, var1, var2,var3,var4,var5)
View(df)
df_m <- gather(df, key="variable", value="value", c("var1","var2","var3","var4","var5"))
ggplot(df_m, aes(x=date_yq, y=value, colour=variable)) +
geom_line()+
geom_bar(stat = "identity")+
xlab("Date") +
ylab("Value")
编辑:经过一些调整,这是重现数据的代码:
ggplot(data = df_m, aes(x = date_yq, y = value,fill=as.factor(variable))) +
geom_bar(data = filter(df_m, variable != "var5"), stat = "identity",
colour="black") + scale_fill_hue(c=45, l=80) +
geom_line(data = filter(df_m, variable == "var5"), aes(col = variable,
group = variable), colour="darkblue",size=1.3)
问题是图例将 var5 显示为 bar 而不是单独的行。可能是什么问题?
解决方案
您可以在 geoms 中对数据进行子集化,例如
ggplot(df_m) +
geom_col(aes(x=date_yq, y=value, fill=variable), data=~filter(., variable != "var5")) +
geom_line(aes(x=date_yq, y=value), colour="black", data=~filter(., variable == "var5")) +
labs(x="Date", y="Value")
提示:如果您预先计算了条形的高度,您只需使用 geom_col()。
推荐阅读
- c++ - 如何获取符号链接目录中文件的绝对路径?
- apache-kafka-connect - 带有 JDBC for Sybase 的 Kafka 连接器 - SQLException:”\”\” 不是有效的类型名称
- reactjs - 如何将 ANT GroupBox 中的值用于 CheckBox?
- algorithm - 算法 W(或 Haskell)中的函数参数不是多态的吗?
- redis - 使用 PFMERGE 损坏 HLL 对象
- c# - 如何将我的谓词转换为 C# 中的泛型谓词?
- java - Spring Boot:MongoDb:异常:NoSuchMethodError:com.mongodb.client.MongoCollection.insertOne(java.lang.Object)
- c# - BizTalk 性能
- c++ - 如果用户在 Qt 中选择它,如何制作启动另一个组件的安装程序的安装程序
- go - 如何在 jwt-go ParseWithClaims 中使用 RSA 解析 JWT 令牌?