将geom_point与geom_col和分面

时间:2018-04-30 16:38:56

标签: r ggplot2 charts facet

我有以下示例代码已从数据框中融化(这是一个示例;实际上我有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.我如何能够对投资组合进行分析,以便美国成为股票图表,而INTL将成为美国股市的图表?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这是一个应该有所帮助的例子。我根据您发布的内容构建了虚拟数据,这样您就可以看到更多的数据被绘制在x轴上。

我使用了来自fct_collapse的{​​{1}}(随forcats发货)将tidyverse折叠为风险或重量。你想用这个做什么,我并不完全清楚,所以请随时纠正我。

对于分面,您可以告诉它要拆分的列 - 在您的情况下为variable。要获得单个列(您说您想要一个列在另一个列之下),请使用Portfolio,并且只获取每个组合中出现的x轴标签,请使用ncol = 1

scales = "free_x"

reprex package(v0.2.0)创建于2018-04-30。