我有来自格式问题的调查数据
| 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"
将其移至右侧,但是afaik,您不能有两行轴线(即使它们是相同的比例)。
这没有多个y
比例,我知道ggplot2
本身不支持这些比例。从技术上讲,它有一个离散的y标度,但有两组标签,但我不知道如何在ggplot2
中实现这一点,而不是使用大量的annotates
。这里有什么帮助?这可以在天然ggplot中做到吗?
这是一个最小的代表:
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")
情节A看起来像这样: 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 :(得分: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()