在标记的 X 轴中有比我所拥有的更多的因素

There are more factors than what I have in the X axis being labeled

我正在绘制一个简单的小提琴图,显示 2 年变量的小提琴,所以我只需要“2017”和“2018”出现在 X 轴上,但从 2016.5 开始出现更多刻度线, 2017.0, 2017.5... 直到 2018.5.在我数据的“年”列中,我只有我想要绘制的两年。我不明白为什么会这样显示。这是我的代码和我得到的图表图像!

enter image description here

sum.data <- ddply(df, .(Field), summarize, mean.TF = mean(TF, na.rm = T))

(violin <- 
    ggplot(df, aes(Year, TF)) +
    geom_violin(aes(fill = factor(Year))) +
    stat_summary(fun.y=mean, geom ="point", shape=18, size=2) +
    labs(x= NULL, y= "Total FAME") +
    facet_grid(Field ~.) +
    geom_hline(data = sum.data, aes(yintercept = mean.TF), linetype = 3) +
    scale_y_continuous(breaks = seq(0,300,50)) +
    theme.custom)

这会起作用。

(violin <- df %>%
    mutate(Year = factor(Year)) %>%
    ggplot( aes(Year, TF)) +
    geom_violin(aes(fill = factor(Year))) +
    stat_summary(fun.y=mean, geom ="point", shape=18, size=2) +
    labs(x= NULL, y= "Total FAME") +
    facet_grid(Field ~.) +
    geom_hline(data = sum.data, aes(yintercept = mean.TF), linetype = 3) +
    scale_y_continuous(breaks = seq(0,300,50)) +
    theme.custom)

发生这种情况是因为 Year 是一个数值变量,并且 ggplot 根据这些值进行了分离,如果你有更多的时间可能不会发生这种情况。这里有两个解决方案。

示例数据

df <-
tibble(
  x = rep(2014:2015, each = 100),
  y = c(rnorm(100),rexp(100))
) 

原代码

df %>% 
  ggplot(aes(x,y))+
  geom_violin(aes(fill = factor(x)))

解决方案

在 factor/character

中转换年份

这是一个很好的解决方案,因为它也解决了美学问题 fill,它可能会使其他一些几何形状复杂化,但这是非常具体的。

df %>% 
  mutate(x = as.factor(x)) %>% 
  ggplot(aes(x,y))+
  geom_violin(aes(fill = x))

为 x 轴添加比例

使用比例你可以设置任何 labelsbreaks,但你仍然需要为了美观 fill.

转换变量
df %>% 
  ggplot(aes(x,y))+
  geom_violin(aes(fill = factor(x)))+
  scale_x_continuous(breaks = 2014:2015)

结果