我有一个使用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...
)。到目前为止,我还没有找到解决方案。我还想将频率字符串用作绘图中的标签。
执行这种操作的最佳实践是什么?
编辑:它必须是一种动态方法,因为我事先不知道我将获得多少个频率/图形。每个频率的项目也可能会有所不同。
答案 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()
有了您的数据,您将得到类似的东西