使用 geom_point 与 geom_col 和分面
Using geom_point with geom_col and faceting
我有下面的示例代码,它是从一个数据框中提取出来的(这是一个例子;实际上我有 8 个投资组合,每个投资组合有 30 个代码):
Ticker variable value Portfolio
AAPL Factor_Risk 4.66 US
ABBV Factor_Risk 1.71 INTL
AAPL Stock_Specific_Risk 0.21 US
ABBV Stock_Specific_Risk 0.07 INTL
AAPL Weight 4.00 US
ABBV Weight 1.66 INTL
这还假设美国投资组合仅由 AAPL 组成,INTL 投资组合仅由 ABBV 组成。我有一些代码可以让我构建一个堆积条形图(用于风险)和一条线(用于重量):
Raw_Portfolio_Data_melt$Type = factor(ifelse(Raw_Portfolio_Data_melt$variable == "Weight", "Weight", "Risk"),
levels = c("Weight", "Risk"))
ggplot(Raw_Portfolio_Data_melt, aes(x = Ticker, y = value)) +
geom_col(data = subset(Raw_Portfolio_Data_melt, variable != "Weight"), aes (fill = variable)) +
geom_line(data = subset(Raw_Portfolio_Data_melt, variable == "Weight"), aes (group = 1, color = variable)) +
scale_color_manual(values = "black") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
两个问题(对 R 很新,对 ggplot 更新)
1.如何调整线以便使用几何点(基本上只有一个标记而不是一条线)作为权重
2. 我如何对投资组合进行分面,以便 US 成为股票图表,而 INTL 成为 US 下方的图表?
感谢您的所有帮助。
下面是一个应该有所帮助的示例。我根据您发布的内容构建了虚拟数据,这样您就可以在 x 轴上看到更多内容。
我使用 forcats
中的 fct_collapse
(tidyverse
附带)将 variable
分解为风险或权重。你想用这个做什么,我不是很清楚,所以请随时纠正我。
对于分面,你告诉它你想在哪一列上拆分——在你的例子中,Portfolio
。要获得单个列(你说你想要一个在另一个下面),请使用 ncol = 1
,并且要仅获得每个投资组合中出现的 x 轴标签,请使用 scales = "free_x"
.
library(tidyverse)
dummy <- tibble(
Ticker = rep(letters[1:6], each = 3),
variable = rep(c("Factor_Risk", "Stock_Specific_Risk", "Weight"), times = 6),
value = runif(18, 0, 1),
Portfolio = rep(c("US", "INTL"), each = 9)
) %>%
arrange(Ticker, variable, Portfolio) %>%
mutate(type = as.factor(variable) %>% fct_collapse(Risk = c("Factor_Risk", "Stock_Specific_Risk")))
ggplot(dummy, aes(x = Ticker, y = value)) +
geom_col(data = . %>% filter(type == "Risk")) +
geom_point(data = . %>% filter(type != "Risk")) +
facet_wrap(~ Portfolio, ncol = 1, scales = "free_x")
由 reprex package (v0.2.0) 创建于 2018-04-30。
我有下面的示例代码,它是从一个数据框中提取出来的(这是一个例子;实际上我有 8 个投资组合,每个投资组合有 30 个代码):
Ticker variable value Portfolio
AAPL Factor_Risk 4.66 US
ABBV Factor_Risk 1.71 INTL
AAPL Stock_Specific_Risk 0.21 US
ABBV Stock_Specific_Risk 0.07 INTL
AAPL Weight 4.00 US
ABBV Weight 1.66 INTL
这还假设美国投资组合仅由 AAPL 组成,INTL 投资组合仅由 ABBV 组成。我有一些代码可以让我构建一个堆积条形图(用于风险)和一条线(用于重量):
Raw_Portfolio_Data_melt$Type = factor(ifelse(Raw_Portfolio_Data_melt$variable == "Weight", "Weight", "Risk"),
levels = c("Weight", "Risk"))
ggplot(Raw_Portfolio_Data_melt, aes(x = Ticker, y = value)) +
geom_col(data = subset(Raw_Portfolio_Data_melt, variable != "Weight"), aes (fill = variable)) +
geom_line(data = subset(Raw_Portfolio_Data_melt, variable == "Weight"), aes (group = 1, color = variable)) +
scale_color_manual(values = "black") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
两个问题(对 R 很新,对 ggplot 更新) 1.如何调整线以便使用几何点(基本上只有一个标记而不是一条线)作为权重 2. 我如何对投资组合进行分面,以便 US 成为股票图表,而 INTL 成为 US 下方的图表?
感谢您的所有帮助。
下面是一个应该有所帮助的示例。我根据您发布的内容构建了虚拟数据,这样您就可以在 x 轴上看到更多内容。
我使用 forcats
中的 fct_collapse
(tidyverse
附带)将 variable
分解为风险或权重。你想用这个做什么,我不是很清楚,所以请随时纠正我。
对于分面,你告诉它你想在哪一列上拆分——在你的例子中,Portfolio
。要获得单个列(你说你想要一个在另一个下面),请使用 ncol = 1
,并且要仅获得每个投资组合中出现的 x 轴标签,请使用 scales = "free_x"
.
library(tidyverse)
dummy <- tibble(
Ticker = rep(letters[1:6], each = 3),
variable = rep(c("Factor_Risk", "Stock_Specific_Risk", "Weight"), times = 6),
value = runif(18, 0, 1),
Portfolio = rep(c("US", "INTL"), each = 9)
) %>%
arrange(Ticker, variable, Portfolio) %>%
mutate(type = as.factor(variable) %>% fct_collapse(Risk = c("Factor_Risk", "Stock_Specific_Risk")))
ggplot(dummy, aes(x = Ticker, y = value)) +
geom_col(data = . %>% filter(type == "Risk")) +
geom_point(data = . %>% filter(type != "Risk")) +
facet_wrap(~ Portfolio, ncol = 1, scales = "free_x")
由 reprex package (v0.2.0) 创建于 2018-04-30。