我正在尝试制作一些基本的图表,这样我就可以更好地理解我的数据中发生了什么。目前1有4个变量,每个变量有200*387个数据点。我将所有内容都存储在一个3D数组中,第三个维度表示与数据相关的不同变量。
目前,我已经制作了一些var1与var2的散点图。但是,我想在此散点图的顶部添加一条条件平均曲线。这将是任何给定var2 (x轴)值的平均var1 (y轴)值。然而,我对Python还是个新手,所以我非常确定我目前所想的方式远不是最有效的。
我现在想的是,我可以对每个变量的数据进行矢量化(即将其设为1D),然后创建一些合理大小的var2箱,然后找出每个箱的var1平均值。我将这些平均值存储在一些新的向量中,然后绘制出来。
这是一种非常愚蠢的方式吗?从我的搜索来看,熊猫似乎有一种简单的方法来做到这一点,但考虑到我对Python的新手,我也不确定直接使用熊猫是否会过度杀伤力。
提前感谢您的任何和所有回复!
发布于 2020-08-11 09:21:38
感谢您的回复。重读我的问题,我已经意识到它是相当糟糕的措辞,所以我为此道歉。
我找到了我的解决方案,最后很简单。不需要使用pandas,也不需要将数据类型从数组更改为数据帧。我最终只使用了scipy中的binned_statistics函数。我的代码实际上就是:
import scipy as sp
n_bins = 80
cond_means, bin_edges, binnumber = sp.stats.binned_statistics(var2, var1, statistic='mean', bins=n_bins)其中,var2是独立(x轴)变量,var1是因变量(y轴)。
对于任何也有兴趣将其用于条件均值图的人,请注意binned_statistics提供的是二进制边缘,而不是二进制均值。这意味着您拥有的bin_edges元素总是比拥有的cond_means元素多一个。一个简单的解决方法是:
bin_width = bin_edges[1] - bin_edges[0]
bin_centres = bin_edges[1:] - bin_width/2现在,您应该能够简单地将条件平均值绘制为:
import matplotlib.pyplot as plt
fig1 = plt.figure()
plt.scatter(var2, var1, color = 'blue', label = 'raw data')
plt.plot(bin_centres, cond_means, color = 'black', label = 'Conditional mean')
plt.legend()
plt.xlabel('var2')
plt.ylabel('var1')
plt.show()https://stackoverflow.com/questions/63333108
复制相似问题