首页 > 解决方案 > 我在 Python 中使用 matplotlib、numpy 和数据集的 4x4 图形没有像我想要的那样工作

问题描述

所以我遇到了这个作业问题,我们需要用名为 iris 的数据集制作一个图形。

图表应如下所示 图表应该看起来像

但我的不是这样,我已经尝试了我能想到的一切。

我让它工作了,但它看起来不一样,所以我开始玩弄,直到我以这张图片下方的错误结束 这是我的结果

ended with the following errors
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last) in 
     28 ax2.scatter(data[:, 0], data[:, 2], c=cols)
     29 ax2.scatter(data[:, 0], data[:, 3], c=cols)
---> 30 ax2.scatter(data[:, 1], data[:, 4], c=cols)
     31 ax2.scatter(data[:, 1], data[:, 5], c=cols)
     32 ax2.scatter(data[:, 1], data[:, 6], c=cols)

IndexError: index 4 is out of bounds for axis 1 with size 4

任何援助将不胜感激...

提前致谢


    import matplotlib.pyplot as plt
    from sklearn.datasets import load_iris
    import numpy as np

    fig = plt.figure()
    ax1 = plt.subplot(4, 3, 1)
    ax2 = plt.subplot(4, 3, 2)
    ax3 = plt.subplot(4, 3, 3)
    ax4 = plt.subplot(4, 3, 4)
    ax5 = plt.subplot(4, 3, 5)
    ax6 = plt.subplot(4, 3, 6)
    ax7 = plt.subplot(4, 3, 7)
    ax8 = plt.subplot(4, 3, 8)
    ax9 = plt.subplot(4, 3, 9)
    ax10 = plt.subplot(4, 3, 10)
    ax11 = plt.subplot(4, 3, 11)
    ax12 = plt.subplot(4, 3, 12)

    iris = load_iris()
    data = np.array(iris['data'])
    targets = np.array(iris['target'])

    cd = {0: 'r', 1: 'b', 2: 'g'}
    cols = np.array([cd[target] for target in targets])

    ax1.scatter(data[:, 0], data[:, 1], c=cols)
    ax2.scatter(data[:, 0], data[:, 2], c=cols)
    ax2.scatter(data[:, 0], data[:, 3], c=cols)
    ax2.scatter(data[:, 1], data[:, 4], c=cols)
    ax2.scatter(data[:, 1], data[:, 5], c=cols)
    ax2.scatter(data[:, 1], data[:, 6], c=cols)
    ax2.scatter(data[:, 2], data[:, 7], c=cols)
    ax2.scatter(data[:, 2], data[:, 8], c=cols)
    ax2.scatter(data[:, 2], data[:, 9], c=cols)
    ax2.scatter(data[:, 3], data[:, 10], c=cols)
    ax2.scatter(data[:, 3], data[:, 11], c=cols)
    ax2.scatter(data[:, 3], data[:, 12], c=cols)
    plt.show()


标签: python-3.xnumpymatplotlibdataset

解决方案


问题是您试图访问一个不存在的索引。你的形状data(150, 4)。您可以使用

print (data.shape)
# (150, 4)

由于索引在 python 中从 0 开始,这意味着第二个索引data可以是 0、1、2 和 3。但是,当您这样做时,您使用的是索引 4

ax2.scatter(data[:, 1], data[:, 4], c=cols)

这是你得到错误的地方。当您这样做时会出现相同的错误data[:, 5], data[:, 6], data[:, 7], data[:, 8],依此类推。您需要首先确定要显示的数据。然后正确选择索引。


推荐阅读