为 ggplot2 中的两个构面组指定不同的 x-tick 标签
Specifying different x-tick labels for two facet groups in ggplot2
我有代表两种方法结果的箱线图,每种方法都有两种验证方法和三种场景,使用 ggplot2 绘制。一切正常,但我想更改 x 轴刻度标签以区分每组中使用的技术类型。
我使用了以下代码:
data <- read.csv("results.csv", header = TRUE, sep=',')
ggplot() +
geom_boxplot(data = data, aes(x = Validation, y = Accuracy, fill = Scenario)) +
facet_wrap(~ Method) +
labs(fill = "")
其中我的数据结构如下:
Method Validation Scenario Accuracy
-------------------------------------------------------
Method 1 Iterations Scenario 1 0.90
Method 1 Iterations Scenario 2 0.80
Method 1 Iterations Scenario 3 0.86
Method 1 Recursive Scenario 2 0.82
Method 2 Iterations Scenario 1 0.69
Method 2 Recursive Scenario 3 0.75
得到如下图:
我只想将方法 1 和方法 2 中的第一个 x-tick 标签 (Iterations) 更改为 100-iterations 和10 次迭代。
我尝试添加此代码,但这会更改两个组的标签。
+ scale_x_discrete(name = "Validation",
labels = c("100-iterations", "Recursive",
"10-iterations", "Recursive")) +
提前致谢。
ggplot 包的 facet 选项不是为不同的轴标签/刻度而设计的(有关详细说明,请参阅 here),但在这种情况下,一种解决方法是改变底层 x 轴不同方面的变量值,并在 facet_wrap()
中设置 scales = "free_x"
,以便在每个方面的 x 轴中仅显示相关值:
library(ggplot2)
library(dplyr)
ggplot(data %>%
mutate(Validation = case_when(Validation == "Recursive" ~ "Recursive",
Method == "Method 1" ~ "100-iterations",
TRUE ~ "10-iterations")),
aes(x = Validation, y = Accuracy, fill = Scenario)) +
geom_boxplot() +
facet_wrap(~ Method, scales = "free_x")
数据:
set.seed(1)
data <- data.frame(
Method = rep(c("Method 1", "Method 2"), each = 100),
Validation = rep(c("Iterations", "Recursive"), times = 100),
Scenario = sample(c("Scenario 1", "Scenario 2", "Scenario 3"), 200, replace = TRUE),
Accuracy = runif(200)
)
我有代表两种方法结果的箱线图,每种方法都有两种验证方法和三种场景,使用 ggplot2 绘制。一切正常,但我想更改 x 轴刻度标签以区分每组中使用的技术类型。
我使用了以下代码:
data <- read.csv("results.csv", header = TRUE, sep=',')
ggplot() +
geom_boxplot(data = data, aes(x = Validation, y = Accuracy, fill = Scenario)) +
facet_wrap(~ Method) +
labs(fill = "")
其中我的数据结构如下:
Method Validation Scenario Accuracy
-------------------------------------------------------
Method 1 Iterations Scenario 1 0.90
Method 1 Iterations Scenario 2 0.80
Method 1 Iterations Scenario 3 0.86
Method 1 Recursive Scenario 2 0.82
Method 2 Iterations Scenario 1 0.69
Method 2 Recursive Scenario 3 0.75
得到如下图:
我只想将方法 1 和方法 2 中的第一个 x-tick 标签 (Iterations) 更改为 100-iterations 和10 次迭代。
我尝试添加此代码,但这会更改两个组的标签。
+ scale_x_discrete(name = "Validation",
labels = c("100-iterations", "Recursive",
"10-iterations", "Recursive")) +
提前致谢。
ggplot 包的 facet 选项不是为不同的轴标签/刻度而设计的(有关详细说明,请参阅 here),但在这种情况下,一种解决方法是改变底层 x 轴不同方面的变量值,并在 facet_wrap()
中设置 scales = "free_x"
,以便在每个方面的 x 轴中仅显示相关值:
library(ggplot2)
library(dplyr)
ggplot(data %>%
mutate(Validation = case_when(Validation == "Recursive" ~ "Recursive",
Method == "Method 1" ~ "100-iterations",
TRUE ~ "10-iterations")),
aes(x = Validation, y = Accuracy, fill = Scenario)) +
geom_boxplot() +
facet_wrap(~ Method, scales = "free_x")
数据:
set.seed(1)
data <- data.frame(
Method = rep(c("Method 1", "Method 2"), each = 100),
Validation = rep(c("Iterations", "Recursive"), times = 100),
Scenario = sample(c("Scenario 1", "Scenario 2", "Scenario 3"), 200, replace = TRUE),
Accuracy = runif(200)
)