如何在python中为多个散点图制作循环?

时间:2019-07-10 15:36:56

标签: python plot

我正在尝试自动化大型数据框矩阵的绘制过程。目标是用另一列绘制每列。每列代表一个变量。另请参见下图。

F.e:性别与年龄,性别与BMI,性别与吸烟,性别与类型等等。

为了清楚起见,我将问题简化为下图: enter image description here

最初,我尝试手工绘制每个组合。但这是一个耗时的练习,不是我想要的。

我也尝试过这种方法(不起作用):

variables = ["Sex", "Age", "BMI"]
for variable in variables:
plt.scatter(df.variable, df.variable)
plt.xlabel('variable')
plt.ylabel('variable')
plt.title('variable vs. variable')
plt.show()

欢迎任何帮助!

PS:如果将线性回归也纳入变量组合也是一种简单的选择,那也将不胜感激。

问候,

纳迪亚(Nadia)

2 个答案:

答案 0 :(得分:0)

您所编码的内容将各列相对于自己。您所描述的是一个嵌套循环。一个简单的升级是

col_choice = ["Sex", "Age", "BMI"]

for pos, axis1 in enumerate(col_choice):   # Pick a first col
    for axis2 in enumerate(col_choice[pos+1:]):   # Pick a later col
        plt.scatter(df.loc[:, axis1], df.loc[:, axis2])

认为,这将生成scatter可接受的序列。

有帮助吗?如果您想变得更“ Pythonic”,请查看itertools.product来生成您的列选择。

答案 1 :(得分:0)

您可以执行以下操作:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# Create dummy dataframe, or load your own with pd.read_csv()

columns = ["sex", "age", "BMI", "smoke", "type"]
data = pd.DataFrame(np.array([[1,0,0,1,0], [23,16,94,18,24], [32, 26, 28, 23, 19], [0,1,1,1,0], [1,2,2,2,1]]).T, columns=columns)


x_col = "sex"
y_columns = ["age", "BMI", "smoke"]


for y_col in y_columns:

    figure = plt.figure
    ax = plt.gca()
    ax.scatter(data[x_col], data[y_col])
    ax.set_xlabel(x_col)
    ax.set_ylabel(y_col)
    ax.set_title("{} vs {}".format(x_col, y_col))

    plt.legend()
    plt.show()

基本上,如果您将数据集另存为.csv文件,则可以使用pd.read_csv()用熊猫加载它,并使用列名作为键来访问相应的行,并在该行上进行迭代(在这里我只是为了创建一个虚拟数据框)。

关于线性回归部分,您应该检出scikit-learn library。它具有用于许多不同任务的回归模型,例如回归,分类和聚类