Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to plot smoothed line (ggalt::xspline) plot with x-axis as factor

I have the following data frame:

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

What I want to do is to smooth the plot. Below is the code I use:

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

It produces the following plot: enter image description here

Noticed that the dashed line is the intended smoothen line with ggalt::geom_xspline().

I intended the order of x-axis to be: c("NT", "IBD+PBS", "IBD+Serpin") Hence they are encoded as a factor.

How can I make it a smooth one like this? But with the intended x-axis order:

enter image description here

like image 760
scamander Avatar asked Mar 04 '23 12:03

scamander


1 Answers

The spline function seems to be thrown off by reading the data in order of appearance, whereas you are plotting it in order of the factor. It looks like this can be addressed by sorting the data before geom_xspline sees it:

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

or:

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

then existing code:

enter image description here

like image 154
Jon Spring Avatar answered May 24 '23 05:05

Jon Spring