Как создать и сохранить отдельные диаграммы рассеяния, используя matplotlib и вложенные циклы for для помеченных данных? - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть набор данных, содержащий 10 объектов и соответствующие метки. Я использую диаграмму рассеяния для построения отдельных пар объектов, чтобы увидеть, какие из них отлично описывают метки (что означает, что будет создано 45 диаграмм). Для этого я использовал вложенный формат l oop. Код не показывает ошибок, и я также получил все графики. Однако в коде явно что-то не так, потому что каждый новый график рассеяния, который создается и сохраняется, также накапливает баллы из предыдущих. Я прилагаю полный код, который я использовал. Как решить эту проблему? Ниже приведена ссылка для набора необработанных данных:

https://github.com/IITGuwahati-AI/Learning-Content/raw/master/Phase%203%20-%202020%20 (лето) / неделя% 201% 20 (мар.% 2028% 20-% 20Apr% 204) /assignment/data.txt

import pandas as pd
import matplotlib
from matplotlib import pyplot as plt

data_url ='https://raw.githubusercontent.com/diwakar1412/Learning-Content/master/DiwakarDas_184104503/datacsv.csv'
df = pd.read_csv(data_url)

df.head()

def transform_label(value):
    if value >= 2:
        return "BLUE"
    else:
        return "RED"

df["Label"] = df.Label.apply(transform_label)

df.head()


colors = {'RED':'r', 'BLUE':'b'}

fig, ax = plt.subplots()

for i in range(1,len(df.columns)):
    for j in range(i+1,len(df.columns)):
        for k in range(len(df[str(i)])):
            ax.scatter(df[str(i)][k], df[str(j)][k], color=colors[df['Label'][k]])
        ax.set_title('F%svsF%s' %(i,j))
        ax.set_xlabel('%s' %i)
        ax.set_ylabel('%s' %j)
        plt.savefig('F%svsF%s' %(i,j))

Набор данных

1 Ответ

0 голосов
/ 05 апреля 2020

Вы должны каждый раз создавать новую фигуру. Попробуйте положить

fig, ax = plt.subplots()

внутри вашего l oop:

for i in range(1,len(df.columns)):
    for j in range(i+1,len(df.columns)):
        fig, ax = plt.subplots() # <-------------- here
        for k in range(len(df[str(i)])):
            ax.scatter(df[str(i)][k], df[str(j)][k], color=colors[df['Label'][k]])
        ax.set_title('F%svsF%s' %(i,j))
        ax.set_xlabel('%s' %i)
        ax.set_ylabel('%s' %j)
        plt.savefig('/Users/Alessandro/Desktop/tmp/F%svsF%s' %(i,j))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...