Home > Software engineering >  Change ylims on dotplot with ggplot
Change ylims on dotplot with ggplot

Time:01-05

I want to build a dot plot with y limits from -3 to 3. This one time, my data does not contain -3, so it does not show up on my plot. I was not abe to manually change ylim to (-3,3). Is there a way to do this? I tried ylim=c(-3,3) and scale_y_discrete(-3,3)

Here is the ggplot code I used to create my dot plot. It works, but the limits on y are -2 and 3.

graf.dot <- ggplot(df.dot,aes(x = data, y = nota, group = data, fill = colour, colour = colour))   facet_wrap(~taxa)   
            geom_dotplot(binaxis = "y", stackdir = "center", dotsize = 2)   
            scale_fill_manual(values = c('Negativo' = 'red','Neutro' = 'gray','Positivo'='green','Ref' = 'black'))   
            scale_colour_manual(values = c('Negativo' = 'red','Neutro' = 'gray','Positivo'='green','Ref' = 'black'))   
            ggtitle("Notas \n")    xlab("")   ylab("")   theme(plot.title = element_text(size = 20, hjust = 0.5), 
            axis.text.y = element_text(size = 18), axis.text.x = element_text(size = 18),legend.key = element_blank(), legend.title = element_blank(), legend.text = element_text(size = 18), legend.position = "bottom", 
            strip.text = element_text(size = 18)); 

And some sample data for my problem.

df.dot=structure(list(taxa = c("T1", "T1", "T1", "T1", "T1", "T1", "T1", 
"T1", "T1", "T1", "T1", "T1", "T1", "T1", "T1", "T1", "T1", "T1", 
"T1", "T1", "T1", "T1", "T1", "T1", "T1", "T1", "T1", "T1", "T1", 
"T2", "T2", "T2", "T2", "T2", "T2", "T2", "T2", "T2", "T2", "T2", 
"T2", "T2", "T2", "T2", "T2", "T2", "T2", "T2", "T2", "T2", "T2", 
"T2", "T2", "T2", "T2", "T2", "T2", "T2", "T3", "T3", "T3", "T3", 
"T3", "T3", "T3", "T3", "T3", "T3", "T3", "T3", "T3", "T3", "T3", 
"T3", "T3", "T3", "T3", "T3", "T3", "T3", "T3", "T3", "T3", "T3", 
"T3", "T3", "T3", "T4", "T4", "T4", "T4", "T4", "T4", "T4", "T4", 
"T4", "T4", "T4", "T4", "T4", "T4", "T4", "T4", "T4", "T4", "T4", 
"T4", "T4", "T4", "T4", "T4", "T4", "T4", "T4", "T4", "T4", "T5", 
"T5", "T5", "T5", "T5", "T5", "T5", "T5", "T5", "T5", "T5", "T5", 
"T5", "T5", "T5", "T5", "T5", "T5", "T5", "T5", "T5", "T5", "T5", 
"T5", "T5", "T5", "T5", "T5", "T5", "T6", "T6", "T6", "T6", "T6", 
"T6", "T6", "T6", "T6", "T6", "T6", "T6", "T6", "T6", "T6", "T6", 
"T6", "T6", "T6", "T6", "T6", "T6", "T6", "T6", "T6", "T6", "T6", 
"T6", "T6", "T7", "T7", "T7", "T7", "T7", "T7", "T7", "T7", "T7", 
"T7", "T7", "T7", "T7", "T7", "T7", "T7", "T7", "T7", "T7", "T7", 
"T7", "T7", "T7", "T7", "T7", "T7", "T7", "T7", "T7"), data = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("nov-22", 
"dez-22", "jan-23"), class = "factor"), nota = structure(c(3L, 
4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 6L, 5L, 4L, 3L, 5L, 5L, 
4L, 6L, 4L, 3L, 4L, 3L, 4L, 5L, 3L, 4L, 6L, 3L, 4L, 4L, 4L, 4L, 
5L, 4L, 4L, 3L, 3L, 4L, 4L, 3L, 3L, 4L, 4L, 4L, 4L, 2L, 4L, 3L, 
3L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 2L, 2L, 3L, 2L, 4L, 4L, 4L, 4L, 
3L, 4L, 3L, 3L, 3L, 4L, 4L, 3L, 2L, 4L, 2L, 4L, 1L, 2L, 3L, 4L, 
2L, 3L, 3L, 2L, 3L, 2L, 5L, 5L, 4L, 3L, 4L, 5L, 2L, 5L, 4L, 3L, 
5L, 3L, 4L, 4L, 4L, 5L, 4L, 3L, 3L, 4L, 3L, 4L, 4L, 4L, 3L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 3L, 3L, 4L, 5L, 4L, 3L, 4L, 3L, 
4L, 3L, 4L, 4L, 4L, 3L, 5L, 3L, 4L, 3L, 3L, 3L, 3L, 3L, 4L, 3L, 
3L, 4L, 5L, 4L, 3L, 4L, 5L, 3L, 3L, 3L, 2L, 4L, 4L, 3L, 2L, 3L, 
3L, 4L, 3L, 3L, 2L, 3L, 3L, 3L, 3L, 2L, 4L, 3L, 3L, 3L, 3L, 3L, 
5L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 3L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 4L, 3L, 3L, 3L, 2L, 3L), .Label = c("-2", "-1", 
"0", "1", "2", "3"), class = "factor"), colour = structure(c(4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Negativo", 
"Neutro", "Positivo", "Ref"), class = "factor")), row.names = c(NA, 
-203L), class = "data.frame")

CodePudding user response:

You should add breaks and limits to scale_y_discrete like this:

library(ggplot2)
graf.dot <- ggplot(df.dot,aes(x = data, y = nota, group = data, fill = colour, colour = colour))   facet_wrap(~taxa)   
  geom_dotplot(binaxis = "y", stackdir = "center", dotsize = 2)   
  scale_fill_manual(values = c('Negativo' = 'red','Neutro' = 'gray','Positivo'='green','Ref' = 'black'))   
  scale_colour_manual(values = c('Negativo' = 'red','Neutro' = 'gray','Positivo'='green','Ref' = 'black'))   
  scale_y_discrete(breaks = factor(c(-3:3)), limits = c("-3", "-2", "-1", "0", "1", "2", "3"))  
  ggtitle("Notas \n")    xlab("")   ylab("")   theme(plot.title = element_text(size = 20, hjust = 0.5), 
                                                     axis.text.y = element_text(size = 18), axis.text.x = element_text(size = 18),legend.key = element_blank(), legend.title = element_blank(), legend.text = element_text(size = 18), legend.position = "bottom", 
                                                     strip.text = element_text(size = 18)); 

graf.dot
#> Bin width defaults to 1/30 of the range of the data. Pick better value with
#> `binwidth`.

Created on 2023-01-04 with reprex v2.0.2

  • Related