pyplot.scatter стирают данные и топор не очень хорош - PullRequest
0 голосов
/ 07 мая 2020

Он все!

Я делаю простой 2-мерный график с данными.

Ошибки

  • У меня есть файл csv, из которого я извлекаю данные, и когда я показываю график, все в порядке. Но если я добавлю .scatter, он просто покажет тот, который я добавил. (например, вы нашли новую вещь и хотите сравнить ее с вашей базой данных, добавив ее на график)
  • Ось Y не в порядке возрастания ..

Мой код:

import matplotlib.pyplot as plt
import matplotlib.patches as mpatches


def faireGraph(fichierCsv):
    with open(fichierCsv) as fichierCsv:
        ligneFin = [ligne.rstrip().rsplit(',') for ligne in fichierCsv.readlines()]

        xLabel = ligneFin[0][0]
        yLabel = ligneFin[0][1]

        xCoord = []
        for i in range(1, len(ligneFin)):
            xCoord.append((float(ligneFin[i][0]), i))
        xCoord.sort(key = lambda x:x[0])

        yCoord = [ligne[1] for ligne in ligneFin[1:]]

        toutesEspeces = []
        for j in range(1, len(ligneFin)):
            toutesEspeces.append(ligneFin[xCoord[j - 1][1]][2])






        for i in range(len(xCoord)):
            if toutesEspeces[i] == 'setosa':
                plt.scatter(xCoord[i][0], yCoord[xCoord[i][1] - 1], c='blue')
            if toutesEspeces[i] == 'versicolor':
                plt.scatter(xCoord[i][0], yCoord[xCoord[i][1] - 1], c='red')
            if toutesEspeces[i] == 'virginica':
                plt.scatter(xCoord[i][0], yCoord[xCoord[i][1] - 1], c='green')

        choixAjtValeur = input("Voulez vous ajouter une valeur à votre tableau ? oui ou non ? (o/n): ")




        rougeLegend = mpatches.Patch(color='red', label='versicolor')
        bleuLegend = mpatches.Patch(color='blue', label='setosa')
        vertLegend = mpatches.Patch(color='green', label='virginica')

        if choixAjtValeur == "o":
            ajtCoodX = float(input("Coordonée x: "))
            ajtCoodY = float(input("Coordonée y: "))

            plt.scatter(ajtCoodX, ajtCoodY, color = "black")

            inconnuLegend = mpatches.Patch(color='black', label='inconnu')

            plt.legend(handles=[vertLegend, rougeLegend, bleuLegend, inconnuLegend])

        else:
            plt.legend(handles=[vertLegend, rougeLegend, bleuLegend])

        plt.xlabel(xLabel)
        plt.ylabel(yLabel)




        print("Affichage du graphique en cours...")

        plt.show()


oui = "iris_2D.csv"

faireGraph(oui)

Любая помощь будет драгоценна, спасибо!

1 Ответ

1 голос
/ 07 мая 2020

Похоже, что поскольку вы используете синтаксический анализ строк для разделения данных (.rsplit (".")), Значения фактически сохраняются в списках Python как строки, а не числа c значений. Вы можете вызвать "float (value)" для каждого из значений, чтобы преобразовать их из строк в числовые c значения, которые Matplotlib построит правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...