在Python子图中添加色条,其中数据点的颜色取决于未绘制的第三个变量。

3

嗨,我在尝试给我的图表添加一个色条时遇到了麻烦。

我有五个1D数组,时间、x和p、q、r,它们的长度都相同。我想绘制x与p,x与q以及x与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的方法,但我对可映射对象im和imshow不确定。

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

1个回答

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()

谢谢,这个方法很有效!现在我只需要调整每个子图的坐标轴就可以了! - JozzaChozza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接