0

我使用 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 的实际条: 失败

我手动检查了返回值

max(unique(Data$Cluster))

并且它返回 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))%>%
4

1 回答 1

0

如果我理解正确,问题是由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 轴。

在 = 2.5、3.5、4.5、5.5 处有不需要的标记刻度线x,这是由于连续刻度。

第二次尝试(给定的连续 x 轴n.breaks

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)

在此处输入图像描述

指定n.breaksinscale_x_continuous()不会将 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)

在此处输入图像描述

于 2021-06-20T18:07:35.367 回答