Построение двух колонок, одна из которых сложена с использованием melt и ggplot - PullRequest
0 голосов
/ 26 апреля 2018

Я искал повсюду и не могу найти ответ на этот вопрос. У меня есть фрейм данных с несколькими переменными, которые я хотел бы преобразовать в барплот.

Этот код здесь:

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)

Переменная «расплавленный» выглядит следующим образом (только пример пары тикеров)

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. Спасибо за ваше время.

1 Ответ

0 голосов
/ 26 апреля 2018

Для меня это звучит так, как будто вы хотите две переменные на оси х, Ticker и вес / риск. На самом деле мы не можем иметь две переменные на оси x, но простой способ обойти это - использовать фасетирование, мы можем фасетировать по тикеру и создать переменную веса / риска для оси x. Вызывая ваши данные 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)

enter image description here


Вместо этого используется строка для определения веса:

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")

enter image description here


Используя эти данные:

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)
...