python-3.x - 从列表创建多个绘图

标签 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...)提供单独的曲线。到目前为止我还没有找到解决方案。我还想使用频率字符串作为我的图中的标签。

执行此类操作的最佳实践是什么?

编辑:它必须是一种动态方法,因为我事先不知道我会得到多少频率/图表。每个频率的项目也可能有所不同。

最佳答案

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

关于python-3.x - 从列表创建多个绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53163716/

相关文章:

python - (Pandas) 正确的 lambda 表达式按值@索引位置 1 对列进行排序

python - 如何修复 python3.4 中没有名为 parse 的模块

python - 将 Numpy 与 pypy 一起使用

python - 确定数组中的重复值

python - 如何在 Python 中更改等值线图图例的文本?

python - 使用 Tkinter 显示条目文本时出现问题

python - 使用 .split 隔离 Python 中未定义的关键字

arrays - Numpy.mean, amin, amax, std 巨额返回

python - Matplotlib 事件处理线选择器

python - python中的Imoverlay