python - 用散点图叠加直方图的列

标签 python matplotlib

我正在尝试可视化数据集,但我很早就陷入了这个过程,因为我不了解 matplotlib 的逻辑。

数据保存在两个相同格式的二维表中:

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

我想在同一个图中可视化这些表格。 data1表的行数比 data2 多得多, 所以我的想法是显示 data1与列直方图和data2有这样的点: Example

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

编辑: 示例代码:

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数组包含太多条目,以至于变得一团糟。因此需要“直方图”。

最佳答案

我想你想做这样的事情:

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 可能会更好。

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

enter image description here

关于python - 用散点图叠加直方图的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20621190/

相关文章:

python 二叉树迭代器 - 为什么返回的节点变为无?

python - GraphLab 安装失败并出现未知错误

python - 在Python中使用正则表达式删除数字而不是年份

python - matplotlib opencv 图像子图

python - 用 matplotlib 绘制 numpy datetime64

python - pandas - 与 matplotlib 进行绘图集成

python - 如何提取 pandas 数据框中的元组值以使用 matplotlib?

python - float 转换为从 .dat 文件读取的符号。不确定编码

python - 在 matplotlib 3d 图中将箭头放在向量上

matplotlib - 尝试分割图像颜色时出错 : numpy. ndarray' 对象没有属性 'mask'