如何以x轴为因数绘制平滑线(ggalt :: xspline)图

时间:2019-08-27 08:05:39

标签: r ggplot2 line-plot

我有以下数据框:

  lp_dat <- structure(list(kmeans_cluster = c("1", "2", "3", "4", "1", "2", 
"3", "4", "1", "2", "3", "4"), tc = structure(c(2L, 2L, 2L, 2L, 
3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L), .Label = c("NT", "IBD+PBS", 
"IBD+Serpin"), class = "factor"), n = c(924, 1389, 0, 652, 924, 
0, 0, 0, 110, 1389, 11851, 0)), row.names = c(NA, -12L), class = c("tbl_df", 
"tbl", "data.frame"))

我想做的是使情节平滑。下面是我使用的代码:

lp <-   ggplot(lp_dat, aes(x = tc, y = n, group = 1)) +
  geom_point(color = "blue") +
  geom_line(linetype = "solid", size = 0.5, color = "blue") +
  ggalt::geom_xspline( size = 0.5, linetype = 'dashed') +
  facet_wrap(~kmeans_cluster, scales = "free_y") +
  theme_bw() +
  xlab("") +
  ylab("Count")

lp

它产生以下图: enter image description here

注意到虚线是使用ggalt::geom_xspline()的预期平滑线。

我希望x轴的顺序为:  c("NT", "IBD+PBS", "IBD+Serpin") 因此,它们被编码为一个因素。

如何使它像这样平滑? 但是具有预期的x轴顺序:

enter image description here

1 个答案:

答案 0 :(得分:6)

通过按外观顺序读取数据似乎会破坏样条函数,而按因子顺序进行绘制。看来可以通过在geom_xspline看到之前对数据进行排序来解决此问题:

lp_dat <- lp_dat[order(lp_dat$tc),]

或:

library(dplyr)
lp_dat <- lp_dat %>% arrange(tc)

然后是现有代码:

enter image description here