I'm using the following code to simulate CLT.
import numpy as np
import matplotlib.pyplot as plt
#a = np.random.random(size=1000000)
#a = np.random.exponential(size=1000000)
a = np.random.poisson(size=1000000)
idx = np.random.randint(0, a.size-1, size=(100000, 30))
plt.hist(a[idx].mean(axis=1), bins=50)
It's just generating a million data points from a specific distribution (as you can see I'm testing out uniform, exponential and Poisson here). Then I get the means of 100,000 samples (of size 30) and plot their histogram. For uniform, I get this:
For exponential:
It's a bit skewed and becomes symmetric as I increase the sample size to around 500, which makes sense.
But for Poisson distribution (sample size 30) I get this:
For Poisson sample size 500:
Once I change the sample size to 10K, or increase $\lambda$ to a higher value, say 100 or 1000, then the plot again starts to look like a normal histogram. The ~0.70 - ~0.73 bin is almost empty (as you can see in the 30 sample size plot). This means that in almost none of the 100K samples, the mean falls in the 0.70 to 0.73 range.
I'm trying to find out: why is that, and why is this particular bin almost empty compared to almost all other bins that are full? What exactly is the mechanism by which those holes turn up?
EDIT: I tried another discrete distribution (uniform integers between 0 and 100) just to check if the issue was due to discreteness of the Poisson distribution:
The histogram is as expected even with a sample size of 30.





EDIT In your first Poisson, the average of 30 Poisson integers, each near 1, must be a multiple of 1/30. There are no multiples of 1/30 between 0.701 and 0.732, so that bin contains no data.
In your second Poisson, the average of 500 integers must be a multiple of $1/500 = 0.002$. Bin widths are about 0.007, so you get three or four values in each bin. Some bins have a 1/3 advantage over their neighbours.
In your uniform test, the average of 30 integers between 1 and 100 must be a multiple of 1/30. Bin widths are about 1, so they contain either 29 or 30 possible values, and no bin has much of an advantage.
The Poisson distribution only takes discrete values. If none of those values is within a bin, then that bin will receive no data points.
If a bin contains three of the possible data values but others only have two, then that bin gets a $50\%$ boost.
Try to set the bins to match the possible values in the Poisson distribution.