Панды: гистограмма с накоплением точек - PullRequest
0 голосов
/ 03 мая 2018

В основном, название. Я хочу сделать гистограмму, где столбцы заменены столбцом сложенных точек. Есть ответ на этот конкретный вопрос в R , но я бы хотел остаться в питоне.

Любая помощь очень ценится:)

Редактировать: добавлена ​​ссылка на изображение пример того, как должен выглядеть конечный результат

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Из коробки нет ничего такого, что могло бы сделать это в matplotlib или его производных (с которыми я знаком). К счастью, pandas.Series.value_counts() делает для нас много тяжелой работы:

import numpy
from matplotlib import pyplot
import pandas

numpy.random.seed(0)
pets = ['cat', 'dog', 'bird', 'lizard', 'hampster']
hist = pandas.Series(numpy.random.choice(pets, size=25)).value_counts()
x = []
y = []
for p in pets:
    x.extend([p] * hist[p])
    y.extend(numpy.arange(hist[p]) + 1)

fig, ax = pyplot.subplots(figsize=(6, 6))
ax.scatter(x, y)
ax.set(aspect='equal', xlabel='Pet', ylabel='Count')

И это дает мне:

enter image description here

0 голосов
/ 03 мая 2018

Не знаю точно, что вы имеете в виду под "гистограммой с точками", но то, что вы описали, звучит как напоминание мне о набеге морского волка:

sns.swarmplot(x="day", y="total_bill", data=tips);

seaborn swarmplot example

Документация Swarmplot здесь: https://seaborn.pydata.org/generated/seaborn.swarmplot.html

Видя ваши изменения, кажется, что, возможно, это больше того, что вы ищете:

import matplotlib.pyplot as plt
import numpy as np
from collections import Counter

data = np.random.randint(10, size=100)
c = Counter(data)
d = dict(c)
l = []

for i in data:
    l.append(d[i])
    d[i] -= 1

plt.scatter(data, l)
plt.show()

Лично я считаю, что Swarmplot выглядит намного лучше, но все, что плавает на вашей лодке.

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