根据参数绘制不同颜色的曲线
我想用一些测量数据来画一条曲线。这些数据以数组的形式存在,里面的每个元素都是一个 [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()