python - Python/Matplotlib - 为同一图形上的多个散点图设置颜色栏
问题描述
我正在使用 Python 和 Matplotlib 向图中添加可变数量的散点图。每个散点图都是一个系列,我想通过它们的序列索引号为每个散点图的点着色。但是,由于我的序列长度不同,我希望所有序列都有 1 个一致的颜色条。
我可以跟踪最小和最大序列长度。但是我如何使用这些信息来配置颜色条来表示这个完整的范围?
解决方案
从这个问题来看,数据的样子并不完全清楚。这是一个使用 4 个不同长度的系列的示例,所有系列都有一个 index 0,1,2,3,...
。散点图绘制索引与值的关系,并使用全色范围为每个系列着色。
建议为每个系列添加一个颜色条,前提是没有太多。每个颜色条都有一个标题,并根据用于该系列的范围显示刻度。使颜色条(除了第一个)非常窄,使它们看起来像一把额外的斧头。
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
N = 4
series_to_plot = [pd.Series(np.random.uniform(i, i + 0.8, np.random.randint(50, 400))) for i in range(1, N + 1)]
names = [f'data{i}' for i in range(1, N + 1)]
fig, ax = plt.subplots(figsize=(12, 5))
for ind, (ser, name) in enumerate(zip(series_to_plot, names)):
scat = ax.scatter(ser.index, ser, c=ser.index, s=1, cmap='plasma')
cax = fig.add_axes(
[1 - (N - ind) * 0.05, 0.1, 0.01 if ind == 0 else 0.002, 0.75]) # left, bottom, width, height, where 1,1 is top right of the fig
cbar = fig.colorbar(scat, cax=cax)
cax.set_title(name)
plt.subplots_adjust(right=0.97 - N * 0.05) # make room for the colorbars
plt.show()
推荐阅读
- c++ - 在 Rcpp 中的字符串类型之间转换时出错
- angular - 使用 Subject 和 next 更新另一个组件中的数据后,如何在一个组件中在 Angular 中运行 http get
- ssh - 如何使用 GitHub Actions 提取机密?
- python - 禁用 TAB TKINTER python
- c# - HttpClient POST 上传失败,没有文件传输和恶意生成 ContentDisposition
- reactjs - 如何防止加载反应父组件
- android - 我在哪里可以找到 Android Studio 的最新金丝雀版本的 android gradle 插件?
- for-loop - Clojure:如何返回在函数的 for 循环中计算的值
- php - 如何使用 PHP 和 CURL 从 API 端点发布到多个 ID?
- node.js - React 中的“npm start”命令执行了哪些任务?