Использование geom_point с geom_col и огранкой - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть приведенный ниже пример кода, который был удален из кадра данных (это пример; на самом деле у меня есть 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 голосов
/ 30 апреля 2018

Вот пример, который должен помочь. Я построил фиктивные данные из того, что вы опубликовали, просто чтобы вы могли видеть больше на графике по оси X.

Я использовал fct_collapse из forcats (корабли с 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")

Создано в 2018-04-30 пакетом Представить (v0.2.0).

...