разброс matplotlib: чем больше точек перекрытия, тем больше маркер - PullRequest
0 голосов
/ 13 марта 2019

Я хочу разбить на график две категориальные переменные следующим образом

from matplotlib import pyplot as plt    
a=[1,1,1,1,2,2]
b=[2,2,2,2,1,1]
plt.scatter(a,b)

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

enter image description here

Я хотел бы видеть график рассеяния, где маркер точки слева (1,2) в два раза больше, чем маркер в точке справа (2,1), чтобы показать другое вхождение точки. Как правильно это сделать? (рядом с тривальным решением, где я считаю события вручную и помещаю их в аргумент size plt.scatter)

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

Указатель может использовать некоторую оценку плотности ядра, как это предлагается в в этом ответе

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

1 Ответ

2 голосов
/ 13 марта 2019

Вы можете использовать частоту появления x-точек (или даже y-точек для этого конкретного набора данных), которую можно получить с помощью модуля Counter.Частоты могут затем использоваться в качестве коэффициента масштабирования для определения размера маркеров.Здесь 200 - это просто большое число, чтобы подчеркнуть размер маркеров.

from matplotlib import pyplot as plt    
from collections import Counter

a=[1,1,1,1,2,2]
b=[2,2,2,2,1,1]

weights = [200*i for i in Counter(a).values() for j in range(i)]
plt.scatter(a, b, s = weights)
plt.show()

enter image description here

Еще один вариант визуализации распределения - это полоскадиаграмма

freqs = Counter(a)

plt.bar(freqs.keys(), freqs.values(), width=0.5)
plt.xticks(list(freqs.keys()))

enter image description here

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