使用 n.breaks 的 ggplot2 中的 x 轴标签有问题
Problem with the x-axis labels in ggplot2 using n.breaks
我使用 n.breaks 为每个集群添加一个带标签的 x 轴标记,这适用于 4、5、6 个集群。现在我用两个集群试了一下,但它不再工作了。
我这样构建图表:
country_plot <- ggplot(Data) + aes(x = Cluster) +
theme(legend.title = element_blank(), axis.title.y = element_blank()) +
geom_bar(aes(fill = country), stat = "count", position = "fill", width = 0.85) +
scale_fill_manual(values = color_map_3, drop = F) +
scale_x_continuous(n.breaks = max(unique(Data$Cluster))) + scale_y_continuous(labels = percent) +
ggtitle("Country")
并像这样导出:
ggsave("country_plot.png", plot = country_plot, device = "png", width = 16, height = 8, units = "cm")
当它工作时它看起来像这样:
但是对于两个集群,我得到了这样的结果,只有一个标记超出了 2.5 的实际条形:
我手动检查了
的return值
max(unique(Data$Cluster))
并且它 returns 2 在我的理解中应该导致两个 x 轴标记 1 和 2 就像它适用于更多的集群。
编辑:
mutate(country = factor(country, levels = 1:3)) %>%
mutate(country =fct_recode(country,!!!country_factor_naming))%>%
mutate(Gender = factor(Gender, levels = 1:2)) %>%
mutate(Gender = fct_recode(Gender, !!!gender_factor_naming))%>%
如果我理解正确,问题是由于 Cluster
被视为连续变量引起的。它需要变成一个因素。
这是一个使用 mtcars
数据集的最小可重现示例,该数据集重现了 不需要的行为:
第一次尝试(连续的 x 轴)
library(ggplot2)
library(scales)
ggplot(mtcars) +
aes(x = gear, fill = factor(vs)) +
geom_bar(stat = "count", position = "fill", width = 0.85) +
scale_y_continuous(labels = percent)
在此示例中,gear
接替 Cluster
的角色并分配给 x 轴。
由于连续刻度,x
= 2.5、3.5、4.5、5.5 处有不需要的标记刻度线。
第二次尝试(给出 n.breaks
的连续 x 轴)
ggplot(mtcars) +
aes(x = gear, fill = factor(vs)) +
geom_bar(stat = "count", position = "fill", width = 0.85) +
scale_x_continuous(n.breaks = length(unique(mtcars$gear))) +
scale_y_continuous(labels = percent)
在 scale_x_continuous()
中指定 n.breaks
不会将 x 轴更改为离散。
第三次尝试(离散 x 轴,gear
作为因子)
当gear
变成一个因子时,我们得到每个因子值的标记刻度线;
ggplot(mtcars) +
aes(x = factor(gear), fill = factor(vs)) +
geom_bar(stat = "count", position = "fill", width = 0.85) +
scale_y_continuous(labels = percent)
我使用 n.breaks 为每个集群添加一个带标签的 x 轴标记,这适用于 4、5、6 个集群。现在我用两个集群试了一下,但它不再工作了。 我这样构建图表:
country_plot <- ggplot(Data) + aes(x = Cluster) +
theme(legend.title = element_blank(), axis.title.y = element_blank()) +
geom_bar(aes(fill = country), stat = "count", position = "fill", width = 0.85) +
scale_fill_manual(values = color_map_3, drop = F) +
scale_x_continuous(n.breaks = max(unique(Data$Cluster))) + scale_y_continuous(labels = percent) +
ggtitle("Country")
并像这样导出:
ggsave("country_plot.png", plot = country_plot, device = "png", width = 16, height = 8, units = "cm")
当它工作时它看起来像这样:
但是对于两个集群,我得到了这样的结果,只有一个标记超出了 2.5 的实际条形:
我手动检查了
的return值max(unique(Data$Cluster))
并且它 returns 2 在我的理解中应该导致两个 x 轴标记 1 和 2 就像它适用于更多的集群。
编辑:
mutate(country = factor(country, levels = 1:3)) %>%
mutate(country =fct_recode(country,!!!country_factor_naming))%>%
mutate(Gender = factor(Gender, levels = 1:2)) %>%
mutate(Gender = fct_recode(Gender, !!!gender_factor_naming))%>%
如果我理解正确,问题是由于 Cluster
被视为连续变量引起的。它需要变成一个因素。
这是一个使用 mtcars
数据集的最小可重现示例,该数据集重现了 不需要的行为:
第一次尝试(连续的 x 轴)
library(ggplot2)
library(scales)
ggplot(mtcars) +
aes(x = gear, fill = factor(vs)) +
geom_bar(stat = "count", position = "fill", width = 0.85) +
scale_y_continuous(labels = percent)
在此示例中,gear
接替 Cluster
的角色并分配给 x 轴。
由于连续刻度,x
= 2.5、3.5、4.5、5.5 处有不需要的标记刻度线。
第二次尝试(给出 n.breaks
的连续 x 轴)
ggplot(mtcars) +
aes(x = gear, fill = factor(vs)) +
geom_bar(stat = "count", position = "fill", width = 0.85) +
scale_x_continuous(n.breaks = length(unique(mtcars$gear))) +
scale_y_continuous(labels = percent)
在 scale_x_continuous()
中指定 n.breaks
不会将 x 轴更改为离散。
第三次尝试(离散 x 轴,gear
作为因子)
当gear
变成一个因子时,我们得到每个因子值的标记刻度线;
ggplot(mtcars) +
aes(x = factor(gear), fill = factor(vs)) +
geom_bar(stat = "count", position = "fill", width = 0.85) +
scale_y_continuous(labels = percent)