用散点图叠加直方图列

时间:2013-12-16 21:23:23

标签: python matplotlib

我正在尝试将数据集可视化,并且我很早就陷入了困境,因为我不理解matplotlib的逻辑。

数据保存在两个格式相同的2d表中:

>>> data1
array([[  1.        ,   1.384     ],
       [  2.        ,   3.65218531],
       [  3.        ,   3.17718531],
       [  1.        ,   2.34513543],
       [  2.        ,   3.43223443],
       [  3.        ,   1.23333255],
        ...
>>> data2
        ...

我想在同一个图中可视化这些表格。 data1表的行数比data2多很多,所以我的想法是使用列式直方图显示data1,使用这样的点显示data2Example

我知道如何制作数据的一维直方图,我知道如何制作散点图,但是如何获得彩色分区并将散点图叠加在正确的位置?

编辑: 示例代码:

import pylab
import numpy
import matplotlib.pyplot as plt

fig = plt.figure()
data1 = numpy.array([[1,1.5],[2,1.7],[3,1.8],[1,1.2],[2,1.8],[3,2.2]])
data2 = numpy.array([[1,2.1],[2,1.3],[3,1.4],[1,1.1],[2,1.9],[3,2.25]])

plt.scatter(data1[:,0], data1[:,1])
plt.scatter(data2[:,0], data2[:,1], color="red")
plt.show()

在实际代码中,data1数组包含许多条目,使其变得混乱。因此希望获得'直方图'。

1 个答案:

答案 0 :(得分:2)

我想你想做这样的事情:

w = .2
bins = np.linspace(-4, 4, 11, endpoint=True)
fig, ax = plt.subplots()
for j in range(1, 15):
    tt = randn(50)

    nn, _bins = np.histogram(tt, bins)
    #  don't use scatter unless you need to change the size or color of the markers
    ax.plot(j*np.ones_like(tt), tt, 'r.')
    ax.imshow(nn.reshape(-1, 1)[::-1], extent=[j-w, j+w, -4, 4], cmap='Blues', aspect='auto', interpolation='none')


ax.set_xlim([0, 15])
ax.set_ylim([-4, 4])

最好将每个bin绘制为Rectangle

您可能还想将vmaxvmin kwargs用于imshow,以便颜色在列之间具有相同的含义。

enter image description here