强制小平面包裹图以公共点为中心,即 0
Force facet wrapped plots to center at a common point, namely 0
我确定有更优雅的方式来绘制此图,但这里有一些我必须处理的数据
score <- c(1, 2, 3, 4, 5, "X")
group1 <- c(0,0,5,-0.2,-4.9,0)
group2 <- c(0.1,0,-1.2,0.4,0.6,0.1)
group3 <- c(0.1,0,3.4,2.9,-6.4,0)
group4 <-c(0,0,-0.9,-0.3,1.3,0)
data <- data.frame(score=as.factor(score), group1=group1, group2=group2, group3=group3, group4=group4)
data_long <- pivot_longer(data, c(group1, group2, group3, group4))
sig <- rep(0, 24)
sig[c(3, 9, 11, 15, 17, 19)] <- 1
sig <- as.factor(sig)
data_long <- cbind(data_long, sig)
bars <- data_long %>% filter(score != 2,
score != "X") %>%
ggplot(aes(x = name, y=value, fill=sig))+
geom_bar(stat="identity") +
coord_flip() +
scale_fill_manual(values=c("grey", "black")) +
facet_wrap(~rating, scales = "free_x") +
theme(legend.position = "none")
print(bars)
这给出了以下情节
这代表四个不同组的每个分数水平与预期值的偏差。 (这是我们不关心 2 和 X 的问题的“特征”)。 sig
列中带有 1 的度量具有统计显着性。
我想做的是让每个面都以 0 为中心。
我尝试了以下找到的方法 here 但无法正常工作...特别是在尝试使用 geom_blank()
[ 的方法时我一直得到 Error: Discrete value supplied to continuous scale
=16=]
你可以提供一个函数来限制一个尺度。在下面的示例中,请注意,我使用 score
而不是 rating
作为构面,并通过交换 x- 和 y-variables 来绕过 coord_flip()
。下面的函数在所谓的 'lambda syntax' 中,但您也可以使用常规的 function(x) c(-1, 1) * max(abs(x))
。
library(tidyverse)
# Data prep as in original question
# data_long <- ...
bars <- data_long %>% filter(score != 2,
score != "X") %>%
ggplot(aes(x = value, y=name, fill=sig))+
geom_bar(stat="identity") +
scale_fill_manual(values=c("grey", "black")) +
scale_x_continuous(
limits = ~ c(-1, 1) * max(abs(.x))
) +
facet_wrap(~score, scales = "free_x") +
theme(legend.position = "none")
bars
我确定有更优雅的方式来绘制此图,但这里有一些我必须处理的数据
score <- c(1, 2, 3, 4, 5, "X")
group1 <- c(0,0,5,-0.2,-4.9,0)
group2 <- c(0.1,0,-1.2,0.4,0.6,0.1)
group3 <- c(0.1,0,3.4,2.9,-6.4,0)
group4 <-c(0,0,-0.9,-0.3,1.3,0)
data <- data.frame(score=as.factor(score), group1=group1, group2=group2, group3=group3, group4=group4)
data_long <- pivot_longer(data, c(group1, group2, group3, group4))
sig <- rep(0, 24)
sig[c(3, 9, 11, 15, 17, 19)] <- 1
sig <- as.factor(sig)
data_long <- cbind(data_long, sig)
bars <- data_long %>% filter(score != 2,
score != "X") %>%
ggplot(aes(x = name, y=value, fill=sig))+
geom_bar(stat="identity") +
coord_flip() +
scale_fill_manual(values=c("grey", "black")) +
facet_wrap(~rating, scales = "free_x") +
theme(legend.position = "none")
print(bars)
这给出了以下情节
这代表四个不同组的每个分数水平与预期值的偏差。 (这是我们不关心 2 和 X 的问题的“特征”)。 sig
列中带有 1 的度量具有统计显着性。
我想做的是让每个面都以 0 为中心。
我尝试了以下找到的方法 here 但无法正常工作...特别是在尝试使用 geom_blank()
[ 的方法时我一直得到 Error: Discrete value supplied to continuous scale
=16=]
你可以提供一个函数来限制一个尺度。在下面的示例中,请注意,我使用 score
而不是 rating
作为构面,并通过交换 x- 和 y-variables 来绕过 coord_flip()
。下面的函数在所谓的 'lambda syntax' 中,但您也可以使用常规的 function(x) c(-1, 1) * max(abs(x))
。
library(tidyverse)
# Data prep as in original question
# data_long <- ...
bars <- data_long %>% filter(score != 2,
score != "X") %>%
ggplot(aes(x = value, y=name, fill=sig))+
geom_bar(stat="identity") +
scale_fill_manual(values=c("grey", "black")) +
scale_x_continuous(
limits = ~ c(-1, 1) * max(abs(.x))
) +
facet_wrap(~score, scales = "free_x") +
theme(legend.position = "none")
bars