2017-02-08 4 views
0

У меня есть данные опроса от вопроса о форматеКак представлять биполярный обзорный вопрос ggplot2 с несколькими осями этикетки

| Statement A | Agree strongly w/ A| ... | Agree strongly w/ B | Statement B | 
| A1   |   o   | ... |   o   | B1   | 

Я хотел бы, чтобы отобразить средства каждого оператора с гистограммой, которая имеет этикетки на обе стороны от бара - один слева для заявления A и один справа для заявления B, например, так:

graph sketch http://tomvladeck.com/wp-content/uploads/2017/02/Screenshot-2017-02-08-12.28.43.png

Я хотел бы иметь линии по оси Y, где вы видите линию под метками «Statement A» и «Statement B», и y где вы видите вставные «A1», «A2» и «B1», «B2». С ggplot при использовании scale_y_discrete у вас может быть только одна строка (насколько я знаю), и вы можете переместить ее вправо с помощью position = "right", но у вас нет двух осей (даже если они одинакового масштаба).

Это не имеет несколько шкал y, которые, как я знаю, не поддерживаются ggplot2. Технически он имеет одну дискретную шкалу y, но с двумя наборами меток, но я не знаю, как реализовать это в ggplot2, кроме использования большого количества annotates. Любая помощь здесь? Можно ли это сделать в естественном ggplot?

Вот минимальный reprex:

example_df <- 
    data.frame(
    statement_a = c("I like to take risks", 
        "I work to provide for my family"), 
    statement_b = c("I am more risk averse", 
        "I work to provide for myself"), 
    value = c(-1.5, .5) 
) 

plot_1 <- 
    ggplot(example_df, 
     aes(x = statement_a, y = value)) + 
    geom_col() + 
    coord_flip() + 
    scale_x_discrete(name = "") 

plot_2 <- 
    ggplot(example_df, 
     aes(x = statement_b, y = value)) + 
    geom_col() + 
    coord_flip() + 
    scale_x_discrete(name = "", position = "top") 

График А выглядит следующим образом: Plot A http://tomvladeck.com/wp-content/uploads/2017/02/plot_a.jpeg

Участок B выглядит следующим образом: Plot B http://tomvladeck.com/wp-content/uploads/2017/02/plot_b.jpeg

А идея показать как осевых линий (один слева в A и один справа в B)

+0

Не ясно, о чем вы спрашиваете. –

+0

@MichaelChernick отредактирован, чтобы уточнить, но вопрос в том, как добавить несколько осевых линий и меток для одного и того же дискретного масштаба в ggplot2. – Tom

+0

Я голосую, чтобы закрыть этот вопрос как вне темы, потому что речь идет о том, как использовать R без воспроизводимого примера. – gung

ответ

1

ggplot не поддерживает несколько осей y (если только они не являются числовыми, а одно - шкалой другого). Есть многочисленные сообщения об этом, которые вы можете искать сами. Вот работа, которая может сделать трюк для вас.

example_df <- 
    data.frame(
    statement_a = c("I like to take risks", 
        "I work to provide for my family"), 
    statement_b = c("I am more risk averse", 
        "I work to provide for myself"), 
    value = c(-1.5, .5) 
) 

row_count <- nrow(example_df) 
max_value <- max(abs(example_df$value)) 

example_df$y <- 1:row_count 

library(ggplot2) 

ggplot(example_df) + 
    geom_rect(aes(xmin = rep(0, row_count), 
       xmax = value, 
       ymin = y-0.3, ymax = y+0.3)) + 
    geom_text(aes(x = -max_value-0.2, 
       y = y, 
       label = statement_a), 
      hjust = 1) + 
    geom_text(aes(x = max_value-0.2, 
       y = y, 
       label = statement_b), 
      hjust = 0) + 
    xlim(c(-max_value-10,max_value+10)) + 
    theme_void() 

enter image description here

+0

Чтобы быть ясным, есть много сообщений, которые говорят о 'ggplot2', не поддерживающих несколько« шкал », но в этом случае« масштаб »одинаковый, это несколько« осей », которые я ищу. – Tom

 Смежные вопросы

  • Нет связанных вопросов^_^