Как установить диапазон оттенков для численной переменной c с помощью цветного пузырькового графика в морском заливе python? - PullRequest
1 голос
/ 17 марта 2020

Я пытаюсь использовать seaborn для создания цветного пузырькового графика из трехмерных точек (x, y, z), каждая координата является целым числом в диапазоне [0,255]. Я хочу, чтобы оси представляли x и y, а цветовой оттенок и размер пузырьков рассеяния представляют координату z.

Код:

import seaborn
seaborn.set()
import pandas
import matplotlib.pyplot

x               = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200]
y               = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200]
z               = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200]

df = pandas.DataFrame(list(zip(x, y, z)), columns =['x', 'y', 'z']) 

ax = seaborn.scatterplot(x="x", y="y",
                 hue="z",
                 data=df)

matplotlib.pyplot.xlim(0,255)
matplotlib.pyplot.ylim(0,255)
matplotlib.pyplot.show()

дает мне довольно много того, что Я хочу:

enter image description here

Это, однако, делает диапазон оттенков основанным на данных в z. Вместо этого я хочу установить диапазон в соответствии с диапазоном значений min и max z (как 0,255), а затем позволить цвету фактических точек отображать на этот диапазон соответственно (поэтому, если точка имеет значение z 50, то это должен быть сопоставлен с цветом, представленным значением 50 в диапазоне [0,255]).

Мой обобщенный вопрос:

  • Как вручную установить оттенок диапазон цветов числовой переменной на диаграмме рассеяния с использованием seaborn?

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

1 Ответ

0 голосов
/ 17 марта 2020

Следуя предложению @ Johan C, использовать hue_norm было решением. Сначала я попытался сделать это, удалив параметр [hue =] и используя только параметр [hue_norm =], который вообще не выдавал никаких цветов (что имеет смысл).

Естественно, следует использовать параметры [hue =] и [hue_norm =].

import seaborn
seaborn.set()
import pandas
import matplotlib.pyplot

x               = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200]
y               = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200]
z               = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 255]

df = pandas.DataFrame(list(zip(x, y, z, my_sizes)), columns =['x', 'y', 'z']) 

ax = seaborn.scatterplot(x="x", y="y",
                 hue="z", 
                 hue_norm=(0,255),        # <------- the solution
                 data=df)

matplotlib.pyplot.xlim(0,255)
matplotlib.pyplot.ylim(0,255)
matplotlib.pyplot.show()
...