首页 > 解决方案 > Python/Matplotlib - 为同一图形上的多个散点图设置颜色栏

问题描述

我正在使用 Python 和 Matplotlib 向图中添加可变数量的散点图。每个散点图都是一个系列,我想通过它们的序列索引号为每个散点图的点着色。但是,由于我的序列长度不同,我希望所有序列都有 1 个一致的颜色条。

我可以跟踪最小和最大序列长度。但是我如何使用这些信息来配置颜色条来表示这个完整的范围?

标签: pythonmatplotlibscatter-plot

解决方案


从这个问题来看,数据的样子并不完全清楚。这是一个使用 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()

示例图


推荐阅读