Today's task was to display a set of data using the radar chart available with the matplotlib.pyplot library. For this I considered the iris dataset available with the sklearn learning library. The dataset is stored as an array, therefore for further manipulation was converted into a data frame. As the radar chart allows comparing only a small set of numerical values, I considered displaying only the mean values for each type of iris (setosas versicolor, virginica).
Unfortunately, the radar chart doesn't seem to complete the polygons based on the available dataset, therefore as workaround I had to duplicate the first column within the result data frame. (It seems that the Ploty library does a better job at displaying radar charts, see example).
Here's the code:
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets import pandas as pd #preparing the data frame iris = datasets.load_iris() ds = pd.DataFrame(data = iris.data, columns = iris.feature_names) dr = ds.assign(target = iris.target) #iris type group_by_iris = dr.groupby('target').mean() group_by_iris[''] = group_by_iris[iris.feature_names[0]] #duplicating the first column # creating the graph fig = plt.subplots() angle = np.linspace(start=0, stop=2 * np.pi, num=len(group_by_iris.columns)) plt.figure(figsize=(5, 5)) plt.subplot(polar=True) values = group_by_iris[:1].values[0] plt.plot(angle, values, label='Iris-setosa', color='r') plt.fill(angle, values, 'r', alpha=0.2) values = group_by_iris[1:2].values[0] plt.plot(angle, values, label='Iris-versicolor', color='g') plt.fill(angle, values, 'g', alpha=0.2) values = group_by_iris[2:3].values[0] plt.plot(angle, values, label='Iris-virginica', color='b') plt.fill(angle, values, 'b', alpha=0.2) #labels plt.title('Iris comparison', size=15) labels = plt.thetagrids(np.degrees(angle), labels=group_by_iris.columns.values) plt.legend() plt.show()
Happy coding!
No comments:
Post a Comment