将颜色条添加到python子图中,其中datapoint的颜色取决于未绘制的第三个变量

时间:2014-12-05 12:26:27

标签: python matplotlib colorbar

嗨,我真的不想尝试在我的情节中添加一个颜色条。

我有五个一维数组,时间,x和p,q,r都是相同的长度。我想绘制x vs p,x vs q和x vs r,但每个颜色代码都与时间有关,这样我就可以看到数据如何随时间演变。

我设法使用Python - Line colour of 3D parametric curve的答案作为示例。这是我的代码:

import matplotlib.pyplot as plt
import numpy as np
from numpy import *
from matplotlib import colors

time, x, p, q, r = loadtxt('data.txt', unpack = True)

cn = colors.Normalize(min(time), max(time))

fig, (axes1, axes2, axes3) = plt.subplots(1,3)

for i in range(len(time)):
    axes1.plot(x[i], p[i], '.', color=plt.cm.jet(cn(time[i])))
    axes2.plot(x[i], q[i], '.', color=plt.cm.jet(cn(time[i])))
    axes3.plot(x[i], r[i], '.', color=plt.cm.jet(cn(time[i])))

plt.show()

但是现在我不得不尝试在这个情节中添加一个颜色条,所以这些点的颜色有一定的含义。

我尝试过使用与Matplotlib 2 Subplots, 1 Colorbar类似的内容,但我不确定mappable im和imshow。

任何帮助将不胜感激! 感谢

1 个答案:

答案 0 :(得分:0)

这(由第三个变量着色)是scatter的目的。您需要使用它(或代理ScalarMappable)来获取色彩图。

因为所有三个轴都使用色彩映射显示相同的数据,所以您无需对色条执行任何操作。所有情节都相同。

作为一个基于你的简单例子:

import numpy as np
import matplotlib.pyplot as plt

time, x, p, q, r = np.random.random((5, 50))

fig, axes = plt.subplots(ncols=3)
for ax, y in zip(axes.flat, [p, q, r]):
    # "s=150" indicates a markersize of 15 points (blame matlab)
    scat = ax.scatter(x, y, c=time, s=150, cmap='jet')
fig.colorbar(scat)

plt.show()