Python / Matplotlib - Установить Colorbar для нескольких графиков рассеяния на одной фигуре - PullRequest
0 голосов
/ 26 января 2020

Я использую Python и Matplotlib, чтобы добавить переменное число графиков рассеяния к фигуре. Каждый график рассеяния представляет собой серию, и я хочу раскрасить точки каждого графика рассеяния по их порядковым номерам. Однако, поскольку мои последовательности имеют разную длину, я хочу, чтобы для всех последовательностей была установлена ​​единая цветная полоса.

Я могу отслеживать минимальную и максимальную длину последовательности. Но как мне использовать эту информацию для настройки цветовой шкалы для представления всего этого диапазона?

1 Ответ

0 голосов
/ 27 января 2020

Из вопроса не совсем понятно, как выглядят данные. Вот пример использования 4 серий различной длины, все из которых имеют индекс 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()

example plot

...