Visualize binary trait distribution in two groups I have just two groups with the certain (not equal to each other) numbers of the trait observations within each group. The trait has only two levels- 0 and 1 (i.e. this trait is binary). For example: we have case and control groups. There are 280 infected (1 state) and 20 uninfected (0 state of the trait) plants (300 totally) in control group. In case group we see 250 uninfected plants (0 state of the trait) and 80 infected ones (1 state) (330 totally). I'd like to show that proportions of infected/uninfected plants are different in these groups.
My solution in R base was (just toy example):
case=seq(0,0,,length.out = 50)
control=seq(1,1,length.out = 50)
boxplot(case,control,names = c('case','control'))

So, in many cases the plots look like:

I'm wondering if there is more elegant solution. Any help would be highly appreciated.
 A: As others have suggested, a mosaic plot is a clear possibility here, allowing portrayal not only of probabilities of case or control and uninfected or infected but also of absolute numbers. 

This was drawn in Stata (complete code below for anyone interested, but you need to install spineplot). Graphs as good or better should be easily possible in your own favourite software. If not, you need new favourite software. Showing the absolute frequencies as text label is a little unusual for this kind of graph, but clearly it is optional and the results are readable for a 2 x 2 set-up. Reversing the order of infected and uninfected (or of case and control) is also possible. 
clear
input byte case byte infected float frequency
0 0  20
0 1 280
1 0 250
1 1  80
end
label values case case
label def case 0 "control" 1 "case"
label values infected infected
label def infected 0 "uninfected" 1 "infected"

set scheme s1color
spineplot infected case [fw=freq], bar1(color(blue*0.6)) bar2(color(red*0.6)) ///
text(freq, mlabsize(*1.5)) ytitle("", axis(2)) xtitle("", axis(2))  xtitle("", axis(1))

A: You could either use a dotplot or bar plot showing the % values that are one (or zero). Or you could use a stacked bar plot with two bars, one for each treatment. Within each bar, use two colours for the % of values that are zero and one. 
Here's an example I found online, although it has more than 2 groups (source: https://python-graph-gallery.com): 

And here's a tutorial that shows how to make them with R & ggplot2: https://rstudio-pubs-static.s3.amazonaws.com/329677_8f579b9e46284caeb9d3a72b7fdb7ac3.html 
A: In your toy example, all the cases have trait = 0 and all the controls have trait = 1. That's probably not what you want. If every observation is either 0 or 1 then you only need to plot one of them, since the other will be determined.  
So you could use a simple bar plot of trait = 0 for the two groups. 
If your trait had multiple levels, I would consider a mosaic plot. If you wanted to stick with bar plots, I would not use stacked bars; William Cleveland has shown that these are not very good representations. I'd use separate bars for each trait.
Another possibility (probably better than bars) is a Cleveland dot plot. 
