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

您好,我真的无法尝试向我的绘图添加颜色条。

我有五个一维数组,时间、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。

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

最佳答案

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

因为所有三个轴都使用颜色图显示相同的数据,所以您不需要对颜色条做任何花哨的事情。所有地 block 之间都是相同的。

作为基于您的示例的简单示例:

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

https://stackoverflow.com/questions/27315869/

相关文章:

tfs - 使用 Team Build 2013 拒绝门控 checkin

django - 在管理员中将动态字段添加到 Django 的 export_as_csv 操作

java - 如何获得 PST 电子邮件地址和姓名?

java - spring @RequestParam Unicode 不正确

java - twitter4j : Update filter of a running Stre

regex - 为什么显示此错误 "Values must match the following

ruby-on-rails - Rails 更新三向连接表

python - 如何在 scrapy 契约(Contract)中向请求添加属性

java - Web 服务连接被拒绝

android - 如何在 Android Studio 中为单元测试设置自定义可绘制目录