我有一个使用 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...
)提供单独的曲线。到目前为止我还没有找到解决方案。我还想使用频率字符串作为我的图中的标签。
执行此类操作的最佳实践是什么?
编辑:它必须是一种动态方法,因为我事先不知道我会得到多少频率/图表。每个频率的项目也可能有所不同。
最佳答案
处理此类表格数据的最佳方法是 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()
通过您的数据,您会得到如下内容:
关于python-3.x - 从列表创建多个绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53163716/