Несколько графиков рассеяния с двумя цветными полосами - PullRequest
3 голосов
/ 10 мая 2019

Я пытаюсь создать график, на котором есть три диаграммы рассеяния, каждый из которых показывает два вида данных. Я хотел бы показать цветным полосам, соответствующим этим данным (т.е. отдельно для оттенков оранжевого и пурпурного). Я знаю, как создать один график с несколькими цветными полосами, и я знаю, как создать несколько графиков с общей цветовой панелью, но я не могу понять, как разместить несколько цветовых полос на графике с несколькими вспомогательными участками.

Вот пример создания нескольких участков:

import numpy as np
import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=1, ncols=3)
images =[]
for i in range(3):
    images.append([axes[i].scatter(np.random.random(10), np.random.random(10), c = np.random.random(10), vmin=0, vmax=1, cmap="Purples_r"),

axes[i].scatter(np.random.random(10),np.random.random(10), c = 
np.random.random(10), vmin=0, vmax=1, cmap="Oranges_r")])

plt.show()

ОБНОВЛЕНИЕ: Добавление следующего кода возвращает две цветовые полосы:

fig.colorbar(images[0][1], ax=axes, fraction=.05)
fig.colorbar(images[0][2], ax=axes, fraction=.05)

Я предполагаю, что сохранение фиксированных общих значений vmin и vmax для всех диаграмм рассеяния гарантирует, что масштаб согласован между графиками.

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Если вы хотите добавить цветную полосу для каждого подзаговора, добавьте вызов к fig.colorbar внутри цикла for. Это может быть полезно, если данные в каждом субплоте не находятся в одном диапазоне. Например, на участке 1 они охватывают от 0 до 1, на участке 2 - от 0 до 2 и т. Д.
Вот пример:

fig, axes = plt.subplots(nrows=1, ncols=3)
images =[]
for i in range(3):
    images.append([axes[i].scatter(np.random.random(10), np.random.random(10), c =
  (1+i)*np.random.random(10), vmin=0, vmax=1+i, cmap="Purples_r"),

    axes[i].scatter(np.random.random(10),np.random.random(10), c =
  (1+i)*np.random.random(10), vmin=0, vmax=1+i, cmap="Oranges_r")])

    fig.colorbar(images[-1][0], ax=axes[i])
    fig.colorbar(images[-1][1], ax=axes[i])

plt.show()

enter image description here

Чтобы сделать что-то более приятным, лучше поместить каждую цветовую полосу на свою ось.

wrl = [1, 4, 1] * 3
fig, axes = plt.subplots(nrows=1, ncols=9, gridspec_kw={'width_ratios': wrl})
images =[]
for i in range(3):
    leftaxpos = i*3
    plotpos = (i*3)+1
    rightaxpos = (i*3)+2

    images.append([axes[plotpos].scatter(np.random.random(10), np.random.random(10), c =
  (1+i)*np.random.random(10), vmin=0, vmax=1+i, cmap="Purples_r"),

    axes[plotpos].scatter(np.random.random(10),np.random.random(10), c =
  (1+i)*np.random.random(10), vmin=0, vmax=1+i, cmap="Oranges_r")])

    fig.colorbar(images[-1][0], cax=axes[leftaxpos])
    fig.colorbar(images[-1][1], cax=axes[rightaxpos])

plt.show()

enter image description here

0 голосов
/ 10 мая 2019

Хорошо, похоже, добавление в код следующего кода:

fig.colorbar(images[0][0], ax=axes, fraction=.05)
fig.colorbar(images[0][1], ax=axes, fraction=.05)

Я пробовал это вчера, и оно не работало, должно быть, что-то было в моей памяти ноутбука.

И просто для полноты, вот полный код:

import numpy as np
import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(12, 3))

images =[]
for i in range(3):
    images.append([axes[i].scatter(np.random.random(10), np.random.random(10), 
    c = np.random.random(10), vmin=0, vmax=1, cmap="Purples_r"),

    axes[i].scatter(np.random.random(10),np.random.random(10), 
    c = np.random.random(10), vmin=0, vmax=1, cmap="Oranges_r")])

fig.colorbar(images[0][0], ax=axes, fraction=.05)
fig.colorbar(images[0][1], ax=axes, fraction=.05)

plt.show()

и вот изображение того, что я искал:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...