0

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

在此处输入图像描述

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)
4

2 回答 2

1

发生这种情况是因为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)))

在此处输入图像描述

解决方案

在因子/字符中转换年份

这是一个很好的解决方案,因为也解决了美学问题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)

结果

在此处输入图像描述

于 2021-09-09T06:10:01.507 回答
0

这将起作用。

(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)
于 2021-09-09T05:39:40.030 回答