使用for循环生成多个polyfit散点图

3

我有一个包含20列的数据框。我想要创建散点图,并在每个散点图上添加一条最佳拟合线。其中x轴是恒定不变的,我希望使用for循环遍历数据框中其它19列的数据。最终结果应该是19张带有最佳拟合线的散点图。

我的当前设置大致如下:

columns = [1,2,3,4,5,6,7...20]
for column in columns:
    x= df[another column from the dataframe]
    y= df[column]
    fit = polyfit(x,y,1)
    fitx = poly1d(fit)
    plt.plot(x,y,'b+', 
             x,fitx(x),'b-')

这会在单个轴上绘制19条最佳拟合线,而不是创建19个轴。有什么想法可以解决这个问题吗?

1个回答

2

您需要显式地创建每个子图。在这个玩具代码中,我使用了一个4x5的网格,导致最后一个图表为空。

子图是通过plt.subplots(nrows, ncols, ...)创建的。我选择4x5是任意的。您可以通过更改行数和列数轻松调整网格。

from itertools import chain

import numpy as np
import pandas as pd
import matplotlib.pylab as plt
np.random.seed(42)

# prepare sample data
columns = ["col" + str(i) for i in range(1, 21)]
data = {col: np.random.rand(10) for col in columns}
df = pd.DataFrame(data)


x_column = "col1"
cols = columns[:]
cols.remove(x_column)

plt, axes = plt.subplots(4, 5, sharex=True, sharey=True, figsize=(12,12))
flat_axes = chain(*axes)

for y_column, ax in zip(cols, flat_axes):
    if y_column != x_column:
        x = df[x_column]
        y = df[y_column]
        fit = np.polyfit(x, y, 1)
        fitx = np.poly1d(fit)
        ax.plot(x, y, 'b+', x, fitx(x),'b-')

这是结果:图表

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接