我是Python和机器学习的新手,作为大学课程的一部分,我们正在使用numpy、matplotlib和sci-kit learn。好吧,我有一个问题。下面的代码运行得很好,我的困惑在于我不太理解发生了什么。所以对于这个代码:
%matplotlib inlineX=iris.dataY=iris.target#第一个特征是萼片长度和萼片宽度plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired)plt.xlabel('萼片长度')plt.ylabel('萼片宽度')
我尝试查看了文档,但对我来说不太理解。在这里我想知道plt.scatter()中的参数是什么意思。我不太理解它,c=Y是什么意思,cmap是什么,为什么有两个X坐标?
至于接下来的代码:
%matplotlib inline#这里也展示了如何进行3D绘图:from mpl_toolkits.mplot3d import Axes3D ##创建一个新图形fig = plt.figure(figsize=(5,5))#这创建了一个1x1的网格(只有一张图),现在我们正在绘制#子图1(这就是111的意思)ax = fig.add_subplot(111, projection='3d') #在3D图中绘制前三个特征。使用 : 表示我们取对应数组维度的所有元素ax.scatter(X[:, 0], X[:, 1], X[:, 2],c=Y)
我想知道的是:
fig.add_subplot(111, projection = ‘3d’)。这里第三个1对我来说不太明白。我理解1×1网格,但我不明白“现在我们正在绘制子图1”。
还有:
ax.scatter()的参数在这里也毫无意义。为什么格式与上面的不同?为什么有三个X而没有cmap?我不太理解它。为什么他们不使用plt.scatter()?
回答:
让我们一步一步地解答你的问题。
首先,“为什么有两个X坐标?”:scatter
函数(http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.scatter)接受x
和y
坐标来标记点;在这种情况下,x
和y
坐标都存储在一个名为X
的二维数组中:X[:,0]
只是x
坐标,X[:,1]
是y
坐标。“c=Y是什么意思?”:有几种给标记着色的选项:
c 可以是一个单一的颜色格式字符串,或者是一个长度为 N 的颜色规格序列,或者是一个长度为 N 的数字序列,通过kwargs指定的cmap和norm映射到颜色(见下文)。请注意,c 不应该是一个单一的数字RGB或RGBA序列,因为这与要进行颜色映射的值数组无法区分。然而,c 可以是一个2-D数组,其中行是RGB或RGBA,包括单行的情况来为所有点指定相同的颜色。
所以在这种情况下,相关的部分似乎是“N个数字使用cmap映射到颜色”,即你提供数据值,scatter
使用某种颜色映射(http://matplotlib.org/examples/color/colormaps_reference.html)来给标记着色。
“fig.add_subplot(111, projection = ‘3d’)。这个第三个1对我来说不太明白。”:add_subplot
在网格上添加子图,其中111
(或者让我们用322
作为更清楚的例子)表示一个有3行2列的网格,你正在使用网格上的第二个位置(即第0行,第1列)作为当前子图。所以subplot(111)
简单地表示一个有1行1列子图的图形,你正在使用(真是个惊喜…)第一个也是唯一的位置。
“为什么有三个X而没有cmap?”:你首先导入了mpl_toolkits.mplot3d
,然后在add_subplot
中指定了projection='3d'
,所以你现在正在创建一个3D的scatter
图,这需要指定标记的x
、y
和z
坐标。