绘制两列,其中一列使用 melt 和 ggplot 堆叠
Plotting two columns, one stacked using melt and ggplot
我找遍了所有地方,似乎找不到这个问题的答案。我有一个包含许多变量的数据框,我想将它们制作成条形图。
代码在这里:
Raw_Portfolio_Data <- read_excel("RData2.xlsx", range = "Exposures!
A10:E47", col_names = FALSE)
Raw_Portfolio_Data <- na.omit(Raw_Portfolio_Data)
Raw_Portfolio_Data <- round(Raw_Portfolio_Data, 2)
names(Raw_Portfolio_Data) <- c
("Ticker", "Factor_Risk", "Stock_Specific_Risk", "Total_Risk", "Weight")
Raw_Portfolio_Data_melt <- melt(Raw_Portfolio_Data, id.vars = "Ticker")
Raw_Portfolio_Data_melt$value <- round(Raw_Portfolio_Data_melt$value, 2)
"melted" 变量看起来像这样(只是几个代码的示例)
Ticker variable value
AAPL Factor_Risk 4.66
ABBV Factor_Risk 1.71
AAPL Stock_Specific_Risk 0.21
ABBV Stock_Specific_Risk 0.07
AAPL Weight 4.00
ABBV Weight 1.66
就是说,我的目标是在 X 轴上设置代码,每个代码有两个条。一根柱子代表权重,一根柱子代表因素风险和股票特定风险数字的组合。
到目前为止,我没有取得太大进展...
ggplot(Raw_Portfolio_Data_melt, aes(x = Ticker, y = value))
有人可以帮帮我吗?如您所知,我是 R 的新手,也是 ggplot2 的新手。谢谢你的时间。
对我来说,听起来您想要 x 轴上的两个变量,Ticker
和 weight/risk。我们实际上不能在 x 轴上有两个变量,但是解决这个问题的一个简单方法是使用分面,我们可以通过 Ticker 分面并为 x 轴创建 weight/risk 变量。为简洁起见调用您的数据 dd
...
dd$Type = factor(ifelse(dd$variable == "Weight", "Weight", "Risk"),
levels = c("Weight", "Risk"))
ggplot(dd, aes(x = Type, y = value, fill = variable)) +
geom_col() +
facet_wrap(~Ticker)
改用线表示重量:
ggplot(dd, aes(x = Ticker, y = value)) +
geom_col(data = subset(dd, variable != "Weight"), aes(fill = variable)) +
geom_line(data = subset(dd, variable == "Weight"), aes(group = 1, color = variable)) +
scale_color_manual(values = "black")
使用此数据:
dd = read.table(text = "Ticker variable value
AAPL Factor_Risk 4.66
ABBV Factor_Risk 1.71
AAPL Stock_Specific_Risk 0.21
ABBV Stock_Specific_Risk 0.07
AAPL Weight 4.00
ABBV Weight 1.66", header = T)
我找遍了所有地方,似乎找不到这个问题的答案。我有一个包含许多变量的数据框,我想将它们制作成条形图。
代码在这里:
Raw_Portfolio_Data <- read_excel("RData2.xlsx", range = "Exposures!
A10:E47", col_names = FALSE)
Raw_Portfolio_Data <- na.omit(Raw_Portfolio_Data)
Raw_Portfolio_Data <- round(Raw_Portfolio_Data, 2)
names(Raw_Portfolio_Data) <- c
("Ticker", "Factor_Risk", "Stock_Specific_Risk", "Total_Risk", "Weight")
Raw_Portfolio_Data_melt <- melt(Raw_Portfolio_Data, id.vars = "Ticker")
Raw_Portfolio_Data_melt$value <- round(Raw_Portfolio_Data_melt$value, 2)
"melted" 变量看起来像这样(只是几个代码的示例)
Ticker variable value
AAPL Factor_Risk 4.66
ABBV Factor_Risk 1.71
AAPL Stock_Specific_Risk 0.21
ABBV Stock_Specific_Risk 0.07
AAPL Weight 4.00
ABBV Weight 1.66
就是说,我的目标是在 X 轴上设置代码,每个代码有两个条。一根柱子代表权重,一根柱子代表因素风险和股票特定风险数字的组合。
到目前为止,我没有取得太大进展...
ggplot(Raw_Portfolio_Data_melt, aes(x = Ticker, y = value))
有人可以帮帮我吗?如您所知,我是 R 的新手,也是 ggplot2 的新手。谢谢你的时间。
对我来说,听起来您想要 x 轴上的两个变量,Ticker
和 weight/risk。我们实际上不能在 x 轴上有两个变量,但是解决这个问题的一个简单方法是使用分面,我们可以通过 Ticker 分面并为 x 轴创建 weight/risk 变量。为简洁起见调用您的数据 dd
...
dd$Type = factor(ifelse(dd$variable == "Weight", "Weight", "Risk"),
levels = c("Weight", "Risk"))
ggplot(dd, aes(x = Type, y = value, fill = variable)) +
geom_col() +
facet_wrap(~Ticker)
改用线表示重量:
ggplot(dd, aes(x = Ticker, y = value)) +
geom_col(data = subset(dd, variable != "Weight"), aes(fill = variable)) +
geom_line(data = subset(dd, variable == "Weight"), aes(group = 1, color = variable)) +
scale_color_manual(values = "black")
使用此数据:
dd = read.table(text = "Ticker variable value
AAPL Factor_Risk 4.66
ABBV Factor_Risk 1.71
AAPL Stock_Specific_Risk 0.21
ABBV Stock_Specific_Risk 0.07
AAPL Weight 4.00
ABBV Weight 1.66", header = T)