8

我用 matplotlib 制作了一个密度图,我也想在它下面得到地毯图。制作密度图的好例子是这里如何在 matplotlib 中创建密度图?

但我找不到任何关于地毯情节的好例子。在 R 中,它可以通过 rug(data) 轻松完成。

4

4 回答 4

13

您可以在每个数据点绘制标记。

from scipy import stats
import numpy as np
import matplotlib.pyplot as plt

sample = np.hstack((np.random.randn(30), np.random.randn(20)+5))
density = stats.kde.gaussian_kde(sample)

fig, ax = plt.subplots(figsize=(8,4))

x = np.arange(-6,12,0.1)
ax.plot(x, density(x))

ax.plot(sample, [0.01]*len(sample), '|', color='k')

在此处输入图像描述

于 2013-07-26T08:32:44.403 回答
4

你可以在这里找到一个例子!

ax = fig.add_subplot(111)

ax.plot(x1, np.zeros(x1.shape), 'b+', ms=20)  # rug plot
x_eval = np.linspace(-10, 10, num=200)
ax.plot(x_eval, kde1(x_eval), 'k-', label="Scott's Rule")
ax.plot(x_eval, kde1(x_eval), 'r-', label="Silverman's Rule")

似乎是它的核心!

于 2013-07-26T08:33:46.930 回答
3

您还可以使用Seaborn.distplot,它完全包装了直方图、KDE ​​和地毯。默认情况下,Seaborn 制作的人物也更漂亮。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sample = np.hstack((np.random.randn(30), np.random.randn(20)+5))
fig, ax = plt.subplots(figsize=(8,4))
sns.distplot(sample, rug=True, hist=False, rug_kws={"color": "g"},
    kde_kws={"color": "k", "lw": 3})
plt.show()

在此处输入图像描述

于 2015-08-06T14:38:10.543 回答
0

这是寻找在 matplotlib 轴上使用 rugplot 的人们的答案:您可以使用 seaborn 函数。

import seaborn as sns
sns.rugplot(xdata, height=0.025, axis=ax,  color='k')

这看起来比纯 matplotlib kludge 好得多,因为地毯与 x 轴对齐(齐平)。

于 2021-11-25T03:43:26.677 回答