I am looking for advice on better ways to plot the proportion of observations in various categories.
I have a dataframe that looks something like this:
I will understand if this isn't really what you're looking for, but I found your description of what you wanted very confusing until I realized that you were simply trying to visualize your data in a way that seemed very unnatural to me.
If someone asked me to produce a graph with the proportions within each category, I'd probably turn to a segmented bar chart:
ggplot(df,aes(x = cat2,fill = cat1)) +
geom_bar(position = "fill")

Note the y axis records proportions, not counts, as you wanted.