Hello Ilian,
That is something that I have also found to be common with GSEA. The ranges of values tends to vary with my data set, but the effect is the same. My best guess of the reason for this gap is based on the specifics of our GSEA implementation. GSEA uses enrichment scores, which are shown in the results page, as a measurement of the enrichment of your input list. It then permutes that list multiple times (default is 1000), and calculates the enrichment scores for those random permutations. It then filters those random permutations to the permutations with enrichment scores that share the same sign as the original list, and then calculates a p-Value.
For an example, imagine the original list had an enrichment score of 0.67. Out of the 1000 permutations, 700 permutations also had a positive enrichment score. The p-value is calculated as the number of those permutations with a larger enrichment score than the original divided by the number of positive permutations. For this example, if 25 out of the 700 permutations had a score above 0.67, the p-Value would be 25/700 = 0.0357. However, it is tricky when the original enrichment score is so high that there are zero permutations with an enrichment score above it. Using the above calculation, the p-Value would be 0. WebGestalt represents this value as 2.2E-16 due to computational limitations.
This happens fairly often, which results in the gap of many p-Values with the value of 2.2E-16. This leads to the gap that you see. In the example, if 1/700 were above 0.67, the p-value would be 0.00143, but changing that to 0/700, would result in 2.2E-16, which is a large gap. FDR is calculated in a similar way, with considerations of set size and other factors, but I would expect this gap to be maintained.
I think plotting the p-Values how you suggested would be acceptable, and as you mentioned, would help address the issue of not over-interpreting the gap. Depending on the plot type, it may be helpful to plot the 0 values as 0.000001 to have a nice color/size gradient, but have a legend represent these values as < 0.00001 (see below) which may be a good compromise.
If you have any questions or if I didn't answer something, please let me know.
Best,
John
<0.00001 example: