从列表创建多个图

时间:2018-11-05 23:19:10

标签: python-3.x numpy matplotlib scipy

我有一个使用matplotlib看起来像这样的Python列表:

[['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 :(得分:2)

处理这类表格数据的最佳方法是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