Python 中的指数值绘图

Exponential value plotting in Python

我有一个指数值列表,我想绘制 Python 分布。我怎样才能做到有意义和有意义?

我的值是这样的:

[0.0, 1.05e-84, 1.05e-84, 1.05e-84, 1.05e-84, 1.05e-84, 1.05e-84, 4.27e-35, 0.0, 3.18e-86, 3.18e-86, 3.18e-86, 3.61e-56, 1.92e-16, 7.3e-13, 7.3e-13, 7.3e-13, 9.04e-11, 9.04e-11, 2.3e-08, 4.3e-08, 4.3e-08, 0.000159, 0.000159, 0.0, 0.0, 0.18, 6.6, 3.0, 3.2, 4.6, 6.4, 7.7, 8.4, 8.8, 9.0, 8.92e-80, 7.8e-53, 7.8e-53, 1.33e-51, 2.56e-51, 2.56e-51, 2.56e-51, 2.56e-51, 2.6, 2.6, 2.6, 2.6, 2.6, 3.9, 3.9, 3.9, 3.9, 9.45e-166, 5.69e-44, 8.34e-44, 8.34e-44, 1.39e-43, 1.39e-43]

我需要这个图来决定另一个分析的阈值。 我要找的是这样的(数据类型一样):https://www.researchgate.net/figure/E-value-distribution-of-contig-sequences-BLAST-results-in-the-sweetpotato-root_fig3_247770651

此外,如果更容易的话,我想使用 gnuplot 而不是 Python。

谢谢

这是你的想法吗?

import numpy as np
import matplotlib.pyplot as plt

data = np.array([0.0, 1.05e-84, 1.05e-84, 1.05e-84, 1.05e-84, 1.05e-84, 1.05e-84, 4.27e-35, 0.0, 3.18e-86, 3.18e-86, 3.18e-86, 3.61e-56, 1.92e-16, 7.3e-13, 7.3e-13, 7.3e-13, 9.04e-11, 9.04e-11, 2.3e-08, 4.3e-08, 4.3e-08, 0.000159, 0.000159, 0.0, 0.0, 0.18, 6.6, 3.0, 3.2, 4.6, 6.4, 7.7, 8.4, 8.8, 9.0, 8.92e-80, 7.8e-53, 7.8e-53, 1.33e-51, 2.56e-51, 2.56e-51, 2.56e-51, 2.56e-51, 2.6, 2.6, 2.6, 2.6, 2.6, 3.9, 3.9, 3.9, 3.9, 9.45e-166, 5.69e-44, 8.34e-44, 8.34e-44, 1.39e-43, 1.39e-43])

plt.plot(data)
plt.yscale('log')
plt.show()

输出:

跟进

这会绘制您的值指数的直方图。请注意,我必须将零更改为 1 以允许 log10 调用。

import numpy as np
import matplotlib.pyplot as plt

data = np.array([0.0, 1.05e-84, 1.05e-84, 1.05e-84, 1.05e-84, 1.05e-84, 1.05e-84, 4.27e-35, 0.0, 3.18e-86, 3.18e-86, 3.18e-86, 3.61e-56, 1.92e-16, 7.3e-13, 7.3e-13, 7.3e-13, 9.04e-11, 9.04e-11, 2.3e-08, 4.3e-08, 4.3e-08, 0.000159, 0.000159, 0.0, 0.0, 0.18, 6.6, 3.0, 3.2, 4.6, 6.4, 7.7, 8.4, 8.8, 9.0, 8.92e-80, 7.8e-53, 7.8e-53, 1.33e-51, 2.56e-51, 2.56e-51, 2.56e-51, 2.56e-51, 2.6, 2.6, 2.6, 2.6, 2.6, 3.9, 3.9, 3.9, 3.9, 9.45e-166, 5.69e-44, 8.34e-44, 8.34e-44, 1.39e-43, 1.39e-43])

data += (data==0.0).astype(int)
data1 = -np.log10( data ).astype( int )
print(data1)

plt.hist(data1, 60)
plt.show()

输出: