What you're looking for is a way to add jitter to the x-axis.
Something like this taken from here:
bp = titanic.boxplot(column='age', by='pclass', grid=False)
for i in [1,2,3]:
y = titanic.age[titanic.pclass==i].dropna()
# Add some random "jitter" to the x-axis
x = np.random.normal(i, 0.04, size=len(y))
plot(x, y, 'r.', alpha=0.2)
Quoting the link:
One way to add additional information to a boxplot is to overlay the
actual data; this is generally most suitable with small- or
moderate-sized data series. When data are dense, a couple of tricks
used above help the visualization:
- reducing the alpha level to make the points partially transparent
- adding random "jitter" along the x-axis to avoid overstriking
The code looks like this:
import pylab as P
import numpy as np
# Define data
# Define numBoxes
P.figure()
bp = P.boxplot(data)
for i in range(numBoxes):
y = data[i]
x = np.random.normal(1+i, 0.04, size=len(y))
P.plot(x, y, 'r.', alpha=0.2)
P.show()
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…