【发布时间】:2018-05-03 14:42:17
【问题描述】:
基本上,标题。我想做一个直方图,将条形图替换为堆积点的列。这个特定问题有一个答案in R,但我想留在 python 中。
非常感谢任何帮助:)
【问题讨论】:
基本上,标题。我想做一个直方图,将条形图替换为堆积点的列。这个特定问题有一个答案in R,但我想留在 python 中。
非常感谢任何帮助:)
【问题讨论】:
在 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')
这给了我:
【讨论】:
不确定您所说的“带点的直方图”是什么意思,但您所描述的内容让我想起 seaborn's swarmplot:
sns.swarmplot(x="day", y="total_bill", data=tips);
此处的 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 看起来好多了,但不管你的船是什么。
【讨论】: