For a scalar random variable, the following plots are all useful depictions of the distribution:
The box plot: This is a simple plot that shows various quantiles of the data using a standard box-and-whiskers method, as well as showing "outliers" that are outside some multiple of the interquartile range. This plot gives a simple sense of where the bulk of the data lies, via the quantiles, without showing the exact data pattern between the plotted quantiles.
The jitter plot: This plot shows the actual data values on the vertical axis, with "jitter" on the horizontal axis to avoid over-plotting. Since jittered data points may still overlap, it is common for this to be combined with alpha-transparency. This plot shows all the actual data values, so it can also be used to get a sense of where the bulk of the data lies. Unless the quantiles are superimposed as additional lines, these are not usually shown in the plot.
The kernel density estimator (KDE): This is an estimated density function that is obtained by placing a density kernel centred on each data point and fitting the spread of the kernels via an estimation method (e.g., maximum likelihood). This does not show the individual data values, but instead gives an estimated density function. It is useful to get a sense of the shape of the estimated density of the data. Unless the quantiles are superimposed as additional lines, these are not usually shown in the plot.
The violin plot: This plot shows the kernel density estimator (KDE) turned on its side and mirrored across the vertical axis, sometimes with the jittered data or a boxplot superimposed over the top. This plot gives the same information as the KDE plot. It is usually used when you want to compare the KDEs of multiple groups on a common vertical axis, to see how the data from each group differs in the sense of its estimated density.
The empirical distribution function: This plot shows the empirical distribution of the data, which is a step function showing the values in the data. If there is a hypothesised distributional family for the data then the plot may include a superimposed curve of the fitted distribution from that family, to show how well the data fits with the hypothesised family.
The quantile-quantile plot (QQ-plot): This plot is only used when you want to compare the observed data to some hypothesised distributional family. The plot shows the theoretical quantiles of the fitted distribution from that family against the actual quantiles of the data. This plot is useful in showing the fit between the data and the hypothesised family of distributions.

R code: These plots were generated with the following R code:
#Generate some data for illustrative purposes
DATA <- data.frame(Value = c(0.7183520, 0.1552427, 0.3825958, 0.6136985, 0.5115953,
7.8374932, 0.2379428, 1.5283571, 0.4201366, 2.2129085,
0.1428784, 0.2197740, 5.2835718, 0.9614190, 5.1368818,
4.9813725, 0.1939262, 1.9237571, 0.1734571, 2.0423763,
0.3566590, 0.2164379, 0.5004123, 2.4234571, 0.2571294,
0.2005742, 2.4439406, 0.0497011, 7.6649720, 0.3979965,
0.1734307, 6.1297727, 5.0372253, 1.1686625, 0.1400576,
1.9234860, 1.3884928, 0.3848981, 0.1834731, 3.7837206,
0.0856054, 0.1307433, 0.1029538, 2.6924914, 0.2843897));
#Load libraries and set theme
library(MASS);
library(ggplot2);
library(gridExtra);
THEME <- theme(plot.title = element_text(hjust = 0.5, size = 14, face = 'bold'),
plot.subtitle = element_text(hjust = 0.5, face = 'bold'));
#Generate box-plot
FIGURE1 <- ggplot(data = DATA, aes(x = '', y = Value)) +
geom_boxplot(fill = 'blue') + THEME +
ggtitle('Boxplot of Values') + xlab(NULL) + ylab('Value');
#Generate jitter plot
set.seed(123456);
FIGURE2 <- ggplot(data = DATA, aes(x = '', y = Value)) +
geom_jitter(size = 4, alpha = 0.4, colour = 'blue') +
expand_limits(y = c(0, 10)) + THEME +
ggtitle('Jitter Plot of Values') + xlab(NULL) + ylab('Value');
#Generate KDE
FIGURE3 <- ggplot(data = DATA, aes(x = Value)) +
geom_density(fill = 'blue') + expand_limits(x = c(0, 10)) + THEME +
ggtitle('Kernel Density of Values') + xlab('Value') + ylab('Density');
#Generate violin plot
FIGURE4 <- ggplot(data = DATA, aes(x = '', y = Value)) +
geom_violin(fill = 'blue', draw_quantiles = c(0.25, 0.5, 0.75)) +
expand_limits(y = c(0, 10)) + THEME +
ggtitle('Violin Plot of Values') + xlab('Density') + ylab('Value');
#Generate empirical CDF plot (with superimposed fitted gamma density)
FIT <- fitdistr(DATA$Value, 'gamma');
FIGURE5 <- ggplot(data = DATA, aes(x = Value)) +
stat_ecdf(geom = 'step', size = 2, colour = 'blue') +
stat_function(size = 2, fun = pgamma, colour = 'red',
args = list(shape = FIT$estimate[1], rate = FIT$estimate[2])) +
expand_limits(x = c(0, 10)) + THEME +
ggtitle('Empirical CDF of Values') + xlab('Value') + ylab('Probability');
#Generate QQ-plot (against fitted gamma density)
FIGURE6 <- ggplot(data = DATA, aes(sample = Value)) +
stat_qq(size = 4, colour = 'blue', alpha = 0.4,
distribution = stats::qgamma,
dparams = list(shape = FIT$estimate[1], rate = FIT$estimate[2])) +
geom_abline(size = 1.2) +
expand_limits(x = c(0.001, 10)) + expand_limits(y = c(0.001, 10)) +
scale_x_log10(breaks = scales::trans_breaks("log10", function(x) 10^x),
labels = scales::trans_format("log10", scales::math_format(10^.x))) +
scale_y_log10(breaks = scales::trans_breaks("log10", function(x) 10^x),
labels = scales::trans_format("log10", scales::math_format(10^.x))) +
THEME +
ggtitle('QQ plot of Values') +
xlab('Theoretical Quantiles') + ylab('Sample Quantiles');
#Print all figures on a single plot
grid.arrange(FIGURE1, FIGURE2, FIGURE3, FIGURE4, FIGURE5, FIGURE6, nrow = 3, ncol = 2);
#Print all figures on a single plot
GRID_PLOT <- arrangeGrob(FIGURE1, FIGURE2, FIGURE3, FIGURE4, FIGURE5, FIGURE6, nrow = 3, ncol = 2);
ggsave('Many Plots.jpg', GRID_PLOT );