In general, this is a challenging problem, especially given the constraint that the relative positions in 2D space should be retained.
In the absence of that constraint, I would recommend a stacked bar plot. With thin bars and a sorted dataset, colours can easily be used to indicate the probability of belonging to different clusters for a fairly substantial number of points. Plots such as these are common in population genetics and can convey a fair amount of useful information, such as in this example.
If we are to stick with the constraint of retaining relative positions in 2 dimensions, I can think of one solution that would work for modest-sized datasets with a small number of clusters. For these cases, you can plot each point as a small pie; the segments of the pie denote the probability of belonging to each cluster.
Here is a worked example using 3 clusters
# Loading required libraries
library(e1071)
library(ggplot2)
library(scatterpie)
# Generating data frame
dat <- data.frame(a = c(rnorm(50, mean = 10, sd = 3),
rnorm(50, mean = 20, sd = 3),
rnorm(50, mean = 30, sd = 3)),
b = c(rnorm(50, mean = 10, sd = 5),
rnorm(50, mean = 20, sd = 3),
rnorm(50, mean = 30, sd = 3)))
# Identifying clusters and calculating cluster probabilities using
# fuzzy c-means clustering
clustdat <- cmeans(dat, centers = 3)
# Adding cluster information to dataset
dat$clusters <- as.factor(clustdat$cluster)
dat$A <- clustdat$membership[,1]
dat$B <- clustdat$membership[,2]
dat$C <- clustdat$membership[,3]
# Plotting
ggplot() + geom_scatterpie(aes(a, b, group = clusters),
data = dat, cols = LETTERS[1:3])
Note that this may be useful with >2 dimensions as well, by combining this with some sort of dimension reduction technique (for plotting - the clustering can be done in multidimensional space).