gpt4 book ai didi

python - 在matplotlib中绘制相关图

转载 作者:太空狗 更新时间:2023-10-29 17:26:01 26 4
gpt4 key购买 nike

假设我有一个离散向量数据集,n=2:

DATA = [
('a', 4),
('b', 5),
('c', 5),
('d', 4),
('e', 2),
('f', 5),
]

我如何使用 matplotlib 绘制该数据集,以便可视化两个变量之间的任何相关性?

任何简单的代码示例都会很棒。

最佳答案

Joe Kington 的答案是正确的,但您的 DATA 可能比所表示的更复杂。它可能在“a”处有多个值。 Joe 构建 x 轴值的方法很快,但只适用于唯一值列表。可能有更快的方法来做到这一点,但这是我完成它的方式:

import matplotlib.pyplot as plt

def assignIDs(list):
'''Take a list of strings, and for each unique value assign a number.
Returns a map for "unique-val"->id.
'''
sortedList = sorted(list)

#taken from
#http://stackoverflow.com/questions/480214/how-do-you-remove-duplicates-from-a-list-in-python-whilst-preserving-order/480227#480227
seen = set()
seen_add = seen.add
uniqueList = [ x for x in sortedList if x not in seen and not seen_add(x)]

return dict(zip(uniqueList,range(len(uniqueList))))

def plotData(inData,color):
x,y = zip(*inData)

xMap = assignIDs(x)
xAsInts = [xMap[i] for i in x]


plt.scatter(xAsInts,y,color=color)
plt.xticks(xMap.values(),xMap.keys())


DATA = [
('a', 4),
('b', 5),
('c', 5),
('d', 4),
('e', 2),
('f', 5),
]


DATA2 = [
('a', 3),
('b', 4),
('c', 4),
('d', 3),
('e', 1),
('f', 4),
('a', 5),
('b', 7),
('c', 7),
('d', 6),
('e', 4),
('f', 7),
]

plotData(DATA,'blue')
plotData(DATA2,'red')

plt.gcf().savefig("correlation.png")

我的 DATA2 集的每个 x 轴值都有两个值。它在下面用红色绘制: enter image description here

编辑

你问的问题很宽泛。我搜索了“相关性”,然后 Wikipedia对 PIL 逊乘积矩系数进行了很好的讨论,它表征了线性拟合的斜率。请记住,此值仅供引用,绝不能预测线性拟合是否是一个合理的假设,请参阅上页中关于 correlation and linearity 的注释。 .这是更新后的 plotData 方法,它使用 numpy.linalg.lstsq 进行线性回归,使用 numpy.corrcoef 计算 Pearson 的 R:

import matplotlib.pyplot as plt
import numpy as np

def plotData(inData,color):
x,y = zip(*inData)

xMap = assignIDs(x)
xAsInts = np.array([xMap[i] for i in x])

pearR = np.corrcoef(xAsInts,y)[1,0]
# least squares from:
# http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html
A = np.vstack([xAsInts,np.ones(len(xAsInts))]).T
m,c = np.linalg.lstsq(A,np.array(y))[0]

plt.scatter(xAsInts,y,label='Data '+color,color=color)
plt.plot(xAsInts,xAsInts*m+c,color=color,
label="Fit %6s, r = %6.2e"%(color,pearR))
plt.xticks(xMap.values(),xMap.keys())
plt.legend(loc=3)

新的数字是: enter image description here

同时展平每个方向并查看各个分布可能会有用,它们是 doing this in matplotlib 的示例: enter image description here

如果线性近似有用(您可以通过查看拟合定性地确定),您可能需要在拉平 y 方向之前减去该趋势。这将有助于表明您具有关于线性趋势的高斯随机分布。

关于python - 在matplotlib中绘制相关图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8154511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com