[SOLVED] Matplotlib is not showing my scatterplot?

Issue

When I use plt.show the plot only shows the PCA lines and not a scatterplot of the first 2 iris features

import numpy as np
import matplotlib.pylab as plt
from sklearn import decomposition

x = np.load("iris_features.npy")[:, :2]
y = np.load("iris_labels.npy")
idx = np.where(y != 0)
x = x[idx]
x[:, 0] -= x[:, 0].mean()
x[:, 1] -= x[:, 1].mean()


pca = decomposition.PCA(n_components=2)
pca.fit(x)
v = pca.explained_variance_ratio_


plt.scatter(x[:, 0], x[:, 1], marker='o', color='b')
ax = plt.axes()
x0 = v[0] * pca.components_[0, 0]
y0 = v[0] * pca.components_[0, 1]
ax.arrow(0, 0, x0, y0, head_width=0.05,) head_length=0.1, fc='r', ec='r')
x1 = v[1] * pca.components_[1, 0]
y1 = v[1] * pca.components_[1, 1]
ax.arrow(0, 0, x1, y1, head_width=0.05, head_length=0.1, fc='r', ec='r')
plt.xlabel("$x_0$", fontsize=16)
plt.ylabel("$x_1$", fontsize=16)
plt.show()

resulting plot

What the correct plot should look like

Solution

Your code seems to work fine using the iris dataset from sklearn, and produces the expected result. You can try that, or you can share your dataset in a testable way, as in principle you could have whatever data in these csv files.

import numpy as np
import matplotlib.pylab as plt
from sklearn import decomposition
from sklearn import datasets

iris = datasets.load_iris()

x = iris.data
y = iris.target

idx = np.where(y != 0)
x = x[idx]
....  # your code continues here

If that doesn’t work, share or directly update your python, matplotlib version.

Answered By – Pablo Ruiz

Answer Checked By – Willingham (BugsFixing Volunteer)

Leave a Reply

Your email address will not be published. Required fields are marked *