带有 2 个 y 轴的 ggplot 箱线图
ggplot boxplots with 2 y axes
我到处寻找如何使用 2 个 y 轴绘制箱线图。
这就是我想要的情节:
boxplot
示例数据:
Sample Tumor Score_1 Score_2
1 A 100 -20
2 B 80 -10
3 C 5 -5
4 C 6 -7
5 C 80 -8
6 C 70 -30
7 C 80 -5
8 C 90 -6
9 A 150 -8
10 B 1 -10
11 B 2 -10
12 B 4 -9
13 B 5 -7
14 B 8 -6
15 B 10 -4
16 B 12 -8
17 B 7 -10
18 B 6 -11
19 C 70 -15
20 C 90 -4
21 C 95 -3
22 C 120 -6
23 C 130 -9
24 C 50 -5
25 C 113 -10
26 C 100 -2
27 C 90 -1
28 C 50 -11
29 C 80 -15
30 A 200 -7
31 A 200 -4
32 A 180 -3
33 A 160 -9
34 A 107 -15
35 A 115 -11
36 A 80 -12
37 A 90 -14
38 A 130 -13
39 A 140 -9
40 A 120 -10
myboxplot <- read.csv("Example.csv")
#Set up labels
ylim.prim <- c(0, 500)
ylim.sec <- c(-35, 0)
b <- diff(ylim.prim)/diff(ylim.sec)
a <- b*(ylim.prim[1] - ylim.sec[1])
myboxplot %>%
pivot_longer(cols = c(Score_1, Score_2)) %>%
mutate(name = factor(name, levels = c("Score_1", "Score_2"))) %>%
ggplot(aes(x = Tumor)) +
geom_boxplot(aes(y = value, fill = name)) +
scale_y_continuous(name ="Score 1", sec.axis = sec_axis(~ ((. - a)/b), name = expression("Score 2"))) +
scale_x_discrete(name = "Tumor") +
theme_bw() +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())+
theme(plot.title = element_text(size = 14, face = "bold"),
text = element_text(size = 12),
#axis.title = element_text(face="bold"),
axis.text.x=element_text(size = 11),
legend.position = "right") +
scale_fill_manual(values = wes_palette("GrandBudapest2"))
我确实得到了图像中的图(上面链接),问题是我的第二组数据(紫色箱线图“Score 2”)没有与第二个 y 轴对齐,而是与第一个 y 轴。由于数据小得多,范围为 -35 到 0,因此您看不到肿瘤类型之间的差异。有谁知道如何更改此设置?
提前致谢!
我认为您要求的情节可能具有误导性。相反,一个方面怎么样?
library(tidyverse)
data %>%
pivot_longer(-c("Sample","Tumor"), names_to = "Score") %>%
ggplot(aes( x= Tumor, y = value, fill = Score)) +
geom_boxplot() +
facet_wrap(.~Score, scales = "free")
或者如@NickCox 所建议的那样:
data %>%
pivot_longer(-c("Sample","Tumor"), names_to = "Score") %>%
group_by(Score,Tumor) %>%
arrange(value) %>%
mutate(xcoord = seq(-0.25,0.25,length.out = n()),
Tumor = factor(Tumor)) %>%
ggplot(aes( x= Tumor, y = value, fill = Score)) +
geom_boxplot(outlier.shape = NA, coef = 0) +
geom_point(aes(x = xcoord + as.integer(Tumor))) +
facet_wrap(.~Score, scales = "free")
[这是在交叉验证问题时发布的]
我发现箱形图超卖,通常情况下,有显示更多细节的空间。这是几种可能性之一,Parzen 意义上的分位数箱图,其中对于每个组,一个显示中位数和四分位数的标准箱叠加在分位数图上,其中隐含的水平轴是等级顺序。除了一些小整数之外,许多值只是 10 的倍数的细节很有趣,应该有助于解释。
这个情节不使用 R。使用 R 的人应该发现做类似或更好的事情是微不足道的——而那些喜欢不同软件的人应该能够说出相同的事情。如果没有,你需要新的喜欢的软件。
我到处寻找如何使用 2 个 y 轴绘制箱线图。
这就是我想要的情节:
boxplot
示例数据:
Sample Tumor Score_1 Score_2
1 A 100 -20
2 B 80 -10
3 C 5 -5
4 C 6 -7
5 C 80 -8
6 C 70 -30
7 C 80 -5
8 C 90 -6
9 A 150 -8
10 B 1 -10
11 B 2 -10
12 B 4 -9
13 B 5 -7
14 B 8 -6
15 B 10 -4
16 B 12 -8
17 B 7 -10
18 B 6 -11
19 C 70 -15
20 C 90 -4
21 C 95 -3
22 C 120 -6
23 C 130 -9
24 C 50 -5
25 C 113 -10
26 C 100 -2
27 C 90 -1
28 C 50 -11
29 C 80 -15
30 A 200 -7
31 A 200 -4
32 A 180 -3
33 A 160 -9
34 A 107 -15
35 A 115 -11
36 A 80 -12
37 A 90 -14
38 A 130 -13
39 A 140 -9
40 A 120 -10
myboxplot <- read.csv("Example.csv")
#Set up labels
ylim.prim <- c(0, 500)
ylim.sec <- c(-35, 0)
b <- diff(ylim.prim)/diff(ylim.sec)
a <- b*(ylim.prim[1] - ylim.sec[1])
myboxplot %>%
pivot_longer(cols = c(Score_1, Score_2)) %>%
mutate(name = factor(name, levels = c("Score_1", "Score_2"))) %>%
ggplot(aes(x = Tumor)) +
geom_boxplot(aes(y = value, fill = name)) +
scale_y_continuous(name ="Score 1", sec.axis = sec_axis(~ ((. - a)/b), name = expression("Score 2"))) +
scale_x_discrete(name = "Tumor") +
theme_bw() +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())+
theme(plot.title = element_text(size = 14, face = "bold"),
text = element_text(size = 12),
#axis.title = element_text(face="bold"),
axis.text.x=element_text(size = 11),
legend.position = "right") +
scale_fill_manual(values = wes_palette("GrandBudapest2"))
我确实得到了图像中的图(上面链接),问题是我的第二组数据(紫色箱线图“Score 2”)没有与第二个 y 轴对齐,而是与第一个 y 轴。由于数据小得多,范围为 -35 到 0,因此您看不到肿瘤类型之间的差异。有谁知道如何更改此设置?
提前致谢!
我认为您要求的情节可能具有误导性。相反,一个方面怎么样?
library(tidyverse)
data %>%
pivot_longer(-c("Sample","Tumor"), names_to = "Score") %>%
ggplot(aes( x= Tumor, y = value, fill = Score)) +
geom_boxplot() +
facet_wrap(.~Score, scales = "free")
或者如@NickCox 所建议的那样:
data %>%
pivot_longer(-c("Sample","Tumor"), names_to = "Score") %>%
group_by(Score,Tumor) %>%
arrange(value) %>%
mutate(xcoord = seq(-0.25,0.25,length.out = n()),
Tumor = factor(Tumor)) %>%
ggplot(aes( x= Tumor, y = value, fill = Score)) +
geom_boxplot(outlier.shape = NA, coef = 0) +
geom_point(aes(x = xcoord + as.integer(Tumor))) +
facet_wrap(.~Score, scales = "free")
[这是在交叉验证问题时发布的]
我发现箱形图超卖,通常情况下,有显示更多细节的空间。这是几种可能性之一,Parzen 意义上的分位数箱图,其中对于每个组,一个显示中位数和四分位数的标准箱叠加在分位数图上,其中隐含的水平轴是等级顺序。除了一些小整数之外,许多值只是 10 的倍数的细节很有趣,应该有助于解释。
这个情节不使用 R。使用 R 的人应该发现做类似或更好的事情是微不足道的——而那些喜欢不同软件的人应该能够说出相同的事情。如果没有,你需要新的喜欢的软件。