根据参数绘制不同颜色的曲线

3 投票
2 回答
3320 浏览
提问于 2025-04-17 17:53

我想用一些测量数据来画一条曲线。这些数据以数组的形式存在,里面的每个元素都是一个 [t,b] 的组合,其中 t 是我想要绘制的参数,而 b 是一个字符串,用来描述测量设备的状态。现在我想绘制 t 的值,并且根据 b 的值来给线条上不同的颜色。到目前为止,我的代码是

import pylab as pl
measurements = [[0, "a"], [1, "b"], [2, "c"]]
times = pl.arange(0, 3, 1)
values = zip(*measurements)[0]
parameters = zip(*measurements)[1]
pl.plot(times, values)
pl.show()

这条线现在应该根据 parameters 中的值有不同的颜色。我该怎么做呢?

2 个回答

-6

画图最简单的方法可能就是使用谷歌的图表API:https://developers.google.com/chart/

这其实不是纯粹的Python,但这是一个值得了解的资源。希望对你有帮助。

2

最好的方法是使用matplotlib的colormap API。

from matplotlib import pyplot as pl
from matplotlib import cm

pl.scatter(times, values, c = cm.spectral(1.*values/max(values)))

显然,你需要用其他函数从你的数据中获取颜色。一般来说,cm.spectral或者任何其他的colormap)会根据一个在0到1之间的浮点数,或者一个在0到255之间的整数返回一个颜色。

总的来说,你可能会发现使用numpy数组比尝试将数据用zip函数组合在一起更好。对于比这个例子更复杂的数据结构,这样做可能会更简单。

import numpy as np
from matplotlib import pyplot as pl
from matplotlib import cm

measurements = np.array([[0, "a"], [1, "b"], [2, "c"]])
times = np.arange(3)
values = np.array(measurements[:,0], dtype=float)
parameters = np.array(measurements[:,1], dtype='S1')

pl.scatter(times, values, c = cm.spectral(values/max(values)))
pl.show()

撰写回答