for循环产生多个polyfit散点图

时间:2015-02-12 22:15:40

标签: python numpy matplotlib plot

我有一个包含20列的数据框。我希望创建一个散点图,每个散点图都有一条最合适的线。 x列将是常量,我想使用for循环来遍历数据框中的每个其他列。结果将是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 个答案:

答案 0 :(得分: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-')

这是结果: plot