熊猫:堆积点直方图

时间:2018-05-03 14:42:18

标签: python pandas histogram

基本上,标题。我想做一个直方图,其中条形由堆叠点的列代替。这个具体问题有一个答案in R,但我想留在python中。

非常感谢任何帮助:)

编辑:添加了图片链接 example of what the final result should look like

2 个答案:

答案 0 :(得分:0)

不确定你的意思是"带点的直方图,"但你所描述的声音让我想起了seaborn's swarmplot:

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看起来好多了,但不管你的船是什么漂浮。

答案 1 :(得分:0)

在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