Точечная диаграмма с использованием карты цветов и отдельных значений альфа - PullRequest
0 голосов
/ 03 декабря 2018

Есть два похожих вопроса по этому поводу:

  1. Отдельные альфа-значения в точечной диаграмме
  2. Добавить альфа к существующей карте цветов matplotlib

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

Вот что я придумал:

import numpy as np
import matplotlib.pylab as plt
from matplotlib.colors import ListedColormap

x = np.arange(10)
y = np.arange(10)
# These are the colors for my data
z = np.arange(10)
# These are the alpha values for my data
alphas = np.linspace(0.1, 1, 10)

# Color map I want to use
cm = plt.cm.get_cmap('viridis')
# Get the colormap colors for my data
my_cmap = cm(z)
# Set alpha
my_cmap[:, -1] = alphas
# Create new colormap
my_cmap = ListedColormap(my_cmap)

plt.subplot(121)
plt.scatter(x, y, cmap=cm, c=z)
plt.subplot(122)
plt.scatter(x, y, cmap=my_cmap, c=z)
plt.show()

но результат не тот, который я ожидаю:

enter image description here

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

1 Ответ

0 голосов
/ 03 декабря 2018

Обычные цветовые карты имеют 256 цветов.Здесь вы выбираете только первые 10, которые выглядят примерно одинаково (все темно-фиолетовые).

Полагаю, ваш код будет работать так, как ожидалось при замене my_cmap = cm(z) на

my_cmap = cm(plt.Normalize(z.min(), z.max())(z))

или

my_cmap = cm(np.linspace(0,1,len(z)))
...