Как создать диаграмму рассеяния морского происхождения с несколькими значениями для каждой ячейки кадра - PullRequest
0 голосов
/ 27 апреля 2020

Я утомляюсь, чтобы создать график рассеяния, который будет иметь несколько точек на оси Y на значение x. мой фрейм данных представляет собой комбинацию объединения нескольких рядов, поэтому он выглядит следующим образом:

        sample 1
var A   [6.1348741][5.98921666][5.98921666]
var B   [6.06300458][6.14294531][6.14294531]
var C   [6.18084289][6.33433549 8.36140445 8.8569102 ][6.33433549 8.36140445 8.8569102 ]
var D   [6.20022251][2.99138873 6.19556828 8.36455137][2.99138873 6.19556828 8.36455137]
var E   [6.1560241][6.30790417][6.30790417]
var F   [6.17638675][6.34667509 8.74861151][6.34667509 8.74861151]

Я пытался использовать регулярные выражения для извлечения данных, но я получаю только первое значение и в любом случае хотел бы идеально обрабатывать каждый список скобок независимо. У кого-нибудь есть какие-либо идеи о том, как go об этом?

Я хотел бы в итоге получить график рассеяния, который имеет индекс по оси x и точки по оси y.

1 Ответ

1 голос
/ 27 апреля 2020

Вы можете перебирать строки и конвертировать каждую строку в список с плавающей точкой. Затем постройте эти списки:

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

df = pd.DataFrame(data={"sample 1": ['[6.1348741][5.98921666][5.98921666]',
                                     '[6.06300458][6.14294531][6.14294531]',
                                     '[6.18084289][6.33433549 8.36140445 8.8569102 ][6.33433549 8.36140445 8.8569102 ]',
                                     '[6.20022251][2.99138873 6.19556828 8.36455137][2.99138873 6.19556828 8.36455137]',
                                     '[6.1560241][6.30790417][6.30790417]',
                                     '[6.17638675][6.34667509 8.74861151][6.34667509 8.74861151]']},
                  index=['var A', 'var B', 'var C', 'var D', 'var E', 'var F'])

for idx, val in df.iterrows():
    ys = [float(v) for v in str(val[0]).replace('[', ' ').replace(']', ' ').split()]
    plt.scatter(np.repeat(idx, len(ys)), ys, c='crimson')
plt.show()

scatter plot

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