you could fake it, but it wouldnt be 'true'
library(tidyverse)
data <- iris %>% select(Sepal.Length,Sepal.Width,Species)
## add some zeros to Sepal.Width
data <- bind_rows(data,
data.frame(Sepal.Length=6.5,
Sepal.Width=0,
Species="virginica"))
ggplot(data, aes(x=Sepal.Length, y=Sepal.Width, fill=Species)) +
geom_dotplot(binaxis='y', stackdir='center', position=position_dodge(0.8)) +
scale_y_continuous(trans='log10' , limits = c(10^-4,5) , breaks=c(10^-4,1:5),
labels=c(0,1:5))