我必须绘制一条倒V形或帐篷形曲线(拉普拉斯算式)。
在此处提供具有python语法的示例数据
import matplotlib.pyplot as plt
#x = np.linspace(-8., 8., 5000)
x= np.array([0, 2, 4, 5, 1, 0, 5, 1, 4, 5, 8, 3, 6])
pdf = np.exp(-abs(x-loc)/scale)/(2.*scale)
plt.plot(x, pdf)
当我绘制此图时,它给了我一个怪异的图。有没有一种简单的方法可以绘制此图,以使我在x轴的x方向和y轴的pdf方向都有元素的频率?
为进一步说明-
我需要将pdf
索引到x
中元素的各个值,然后x
的各个值才有n-frequency
。我需要针对n-frequency
绘制pdf
。
对于调试,您可以取消注释x = np.linspace(-8., 8., 5000)
并注释x= np.array([0, 2, 4, 5, 1, 0, 5, 1, 4, 5, 8])
,您会看到倒V曲线。
我可以接受解决方案,也可以使用R或python提出建议。
示例曲线的外观
答案 0 :(得分:2)
import numpy as np
import matplotlib.pyplot as plt
x = np.random.normal(scale=5, size=50000) # create example data
bins = np.linspace(-15, 15, 31) # make bins to count occurrences within
counts, bins = np.histogram(x, bins) # do the counting
# counts is the number of occurences of x in each bin
bins = (bins[1:]+bins[:-1])/2.0 # take the midpoints of the bins for plotting
plt.loglog(bins, counts) # you'll only get the triangle shape in log-log space
用正确的数据替换x
,我想这就是您想要的。您需要计算每个bin中的元素数量。您附加的链接告诉您垃圾箱是什么。您可以使用np.linspace
或np.arange
来创建此数组。
另外-我最近了解到,如果要在对数对数空间中绘制直方图,使用对数间隔的bin是明智的,因此点在对数对数空间中是均匀间隔的。您可以使用np.geomspace
来做到这一点。