python - Matplotlib:同一图中 2 个散点图的通用颜色图
问题描述
我将双变量时间序列存储在2D Numpy arrays
. 我想在同一个情节上绘制该系列的两个频道。每个系列都应该用一条根据频道着色的线来表示。在这些行之上,我想将系列的点绘制为点。这些应该根据第二个2D Numpy array
相同形状的值着色。我的问题是:如何为两个通道共有的范围内的点设置颜色映射?
我设法通过双重调用为每个系列获得了不同颜色和点的线条,plt.plot()
例如plt.scatter()
:
import matplotlib.pyplot as plt
import numpy as np
# Bivariate time-series of length 10
nchannel, length = 2, 10
array_series = np.random.random((nchannel, length))
array_colors = np.vstack([np.repeat(0, length), np.repeat(1, length)])
colormap = 'jet'
plt.plot(np.arange(length), array_series[0,:])
plt.scatter(np.arange(length), array_series[0,:], c=array_colors[0,:], cmap=colormap)
plt.plot(np.arange(length), array_series[1,:])
plt.scatter(np.arange(length), array_series[1,:], c=array_colors[1,:], cmap=colormap)
这不是所需的输出,因为所有点都是深蓝色,因此 0 和 1 之间的区别array_colors
丢失了。我寻找类似替换plt.scatter(..., c=array_colors[i,:], cmap=colormap)
的东西plt.scatter(..., c=array_colors, cmap=colormap)
。但是,后者会引发错误。欢迎任何解决此问题的想法!
解决方案
您可以使用参数vmin
和vmax
。
vmin
作为全局最小值传递,并作为vmax
全局最大值传递。这将导致所有调用来scatter
缩放相同范围内的值,从而产生统一的色标。
例子:
import matplotlib.pyplot as plt
import numpy as np
nchannel, length = 2, 10
array_series = np.random.random((nchannel, length))
array_colors = np.vstack([np.repeat(0, length), np.repeat(1, length)])
colormap = 'jet'
vmin = np.min(array_colors)
vmax = np.max(array_colors)
x = np.arange(length)
plt.plot(x, array_series[0,:])
plt.scatter(x, array_series[0,:], vmin=vmin, vmax=vmax, c=array_colors[0,:], cmap=colormap)
plt.plot(x, array_series[1,:])
plt.scatter(x, array_series[1,:], vmin=vmin, vmax=vmax, c=array_colors[1,:], cmap=colormap)
推荐阅读
- nearprotocol - 如何将状态更新存储在链下数据库中?
- javascript - 有没有办法计算 Typed.js 花费的全部时间?
- mongodb - 具有语言支持的 MongoDb 文本搜索
- python - 尝试在 python 3.9 中创建虚拟环境
- spring-boot - Spring Boot 连接到 Kafka Brokers
- python - 生成具有 n 个连续重复元素的排列
- c - 计算机中的十进制转二进制
- html - 我们如何将水印添加到现有的 html 文件中
- node.js - 如何从 API 检索数据并使用 nodejs 写入 Json 文件
- java - 在编辑代码之前尝试运行 Google App Engine 时出错