Отображение сложенного гистограммы с условием - PullRequest
0 голосов
/ 10 июля 2019

У меня есть этот фрейм данных с числами в процентах:

`df <- data.frame(spoken = c(10, 90, 30, 70), 
 lexicon = c(10, 90, 50, 50), 
 row.names = c("consonant_initial", 
    "vowel_initial", 
    "consonant_final",  "vowel_final"))`

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

Я попытался изменить данные:

df$row <- seq_len(nrow(df)) df <- melt(df, id.vars = "row")

Однако я не могу понять, как мне нужно изменить форму данных, чтобы отобразить их соответствующим образом

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Вам нужно разделить имена строк, поскольку информация, необходимая для цветового кодирования столбцов с полосами, закодирована, если я правильно понимаю ваш желаемый график.

library(tidyverse)
df$label <- row.names(df)


df %>%
  separate(label, c("lettertype", "position"), "_") %>%
  gather(key = 'condition', value = 'prop', -lettertype, -position) %>%
  ggplot() +
  aes(x = position, y = prop, fill = lettertype) +
  geom_bar(stat = 'identity') +
  facet_wrap(~condition) 

enter image description here

0 голосов
/ 10 июля 2019
df$row1 <- sapply(strsplit(row.names(df), "_"), function(x) x[1])
df$row2 <- sapply(strsplit(row.names(df), "_"), function(x) x[2])
library(reshape2)
df <- melt(df, id.vars = c("row1", "row2"))

library(ggplot2)
ggplot(df, aes(x = row2, y = value, fill = row1)) +
    geom_col() +
    facet_wrap(~variable)

enter image description here

...