I will try to answer B.
I do not know if there is a parameter that will allow you to do B), but you can manually determine the function that will do this for you. I.e:.
library(ggplot2)
X <- c(rnorm(1000, mean = 0.5, sd = 0.2),
rnorm(10, mean = 10, sd = 0.5))
Data <- data.frame(table(cut(X, breaks=c(seq(0,1, by=0.05), max(X)))))
remove_elem <- function(x,n) {
for (i in (1:length(x))) {
if (i %% n == 0) {x[i]<-''}
}
return(x)
}
labels <-paste0(c(seq(5,100, by = 5),'>100'),'%')
Now, using this function inside the ggplot function:
ggplot(Data, aes(x = Var1, y = Freq)) + geom_bar(stat = "identity") +
scale_x_discrete(labels = remove_elem(labels,2))
outputs:

I don’t know, this is what you are looking for, but it is a trick!