Создание нескольких графиков из списка - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть список Python, который выглядит примерно так, используя matplotlib:

[['125Hz', 0, 55.9], 
['125Hz', 30, 54.9], 
['125Hz', 60, 52.2], 
['125Hz', 90, 51.5], 
['125Hz', 120, 51.1], 
['125Hz', 150, 49.6], 
['125Hz', 180, 50.4], 
['250Hz', 0, 57.0], 
['250Hz', 30, 56.1], 
['250Hz', 60, 53.8], 
['250Hz', 90, 52.2], 
['250Hz', 120, 50.7], 
['250Hz', 150, 48.2], 
['250Hz', 180, 48.1], 
['500Hz', 0, 58.0],
....
]

Мне нужны отдельные кривые для каждой появляющейся частоты (например, 125Hz, 250Hz...). Я не нашел решения до сих пор. Я также хотел бы использовать строку частоты в качестве метки на моем графике.

Как лучше всего выполнять такую ​​операцию?

Редактировать: Это должен быть динамический метод, так как я не знаю заранее, сколько частот / графиков я получу. Количество предметов на частоту также может варьироваться.

1 Ответ

0 голосов
/ 06 ноября 2018

Лучший способ справиться с такими табличными данными - это pandas, в который встроено множество функций для группировки данных. В вашем случае это может выглядеть примерно так:

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

d = np.array([['125Hz', 0, 55.9], 
['125Hz', 30, 54.9], 
['125Hz', 60, 52.2], 
['125Hz', 90, 51.5], 
['125Hz', 120, 51.1], 
['125Hz', 150, 49.6], 
['125Hz', 180, 50.4], 
['250Hz', 0, 57.0], 
['250Hz', 30, 56.1], 
['250Hz', 60, 53.8], 
['250Hz', 90, 52.2], 
['250Hz', 120, 50.7], 
['250Hz', 150, 48.2], 
['250Hz', 180, 48.1], 
['500Hz', 0, 58.0]])

# Create a pandas dataframe from your numpy array:
df = pd.DataFrame(d, columns = ['freq','x','y'])

# cast x and y to numeric types:
df[['x','y']] = df[['x','y']].astype(float)

# Group by frequency, and plot your variables
for freq, data in df.groupby('freq'):
    plt.plot(data.x, data.y, label=freq)

plt.legend()

plt.show()

С вашими данными вы получите что-то вроде:

enter image description here

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