2018/03/17
时隔一年又重新开始捡起来机器学习的东西,还是从最简单的画图开始吧。
【画图从零开始】当然数据集还是从iris开始。
还是在服务器上运行,这部分还是使用原来的那个命令,引入后执行use('Agg')
保证可以保存。
从官方文档处学习:http://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html#sphx-glr-auto-examples-datasets-plot-iris-dataset-py
version_0:最简单的版本,加载数据后,直接使用plt的默认画图。
1 #! /bin/python
2 #coding:utf-8
3 #2018/03/17
4 #Author:VChao
5
6 import matplotlib
7 matplotlib.use('Agg')
8
9
10 import matplotlib.pyplot as plt
11 from sklearn import datasets
12
13
14 def main():
15iris = datasets.load_iris()
16x = iris.data[:,:2]
17y = iris.target
18
19plt.scatter(x[:,0],x[:,1],c = y)
20plt.savefig("start1.png")
21
22
23
24 if __name__ == "__main__":
25main()
途中的标号是从vim里面直接带过来的,带着也没什么不好看,就呆着吧。
结果如图:
文章图片
version_0 缺点:没有标题,没有各个轴的名称
version_1:增加标题,和轴名称
文章图片
version_1 因为这个测试对相应轴的数量值并不敏感,想办法去掉。
version_2:简单修改坐标轴样式最终版本代码:
1 #! /bin/python
2 #coding:utf-8
3 #2018/03/17
4 #Author:VChao
5
6 import matplotlib
7 matplotlib.use('Agg')
8
9
10 import matplotlib.pyplot as plt
11 from sklearn import datasets
12
13
14 def main():
15iris = datasets.load_iris()
16x = iris.data[:,:2]
17y = iris.target
18
19plt.scatter(x[:,0],x[:,1],c = y)
20
21
22plt.xlabel("Sepal length")
23plt.ylabel("Sepal width")
24plt.title("Hello")
25
26#Make the x line like
27plt.xticks(())
28plt.yticks(())
29
30
31
32
33plt.savefig("start1.png")
34
35
36
37
38 if __name__ == "__main__":
39main()
40
文章图片
version_2 对于个这个点的样式还是可以修改的。后续一点一点修改。
现在单个图的样式已经完成了,但是如果去构造多个图呢,不能说一个一个脚本去写对吧,肯定是从一个图里面,看到多个属性。
version_3:多个图绘制在一起。这里一共是四个属性。正常应该是6个图如果是说你一个一个的去画,这个工作实在是太繁琐了。当然可能说,以后遇见的数据比较奇葩,各个图本身就不是一样的东西,那就每个单独去画。这里东西还是比较好的,那就最好是函数式编程。
http://blog.topspeedsnail.com/archives/760
上面这个网址是一些子图的绘画方式,这个子图是用
subplot
,暂且不去关注到底是什么样的方式,先学会一种再说。http://blog.csdn.net/cdqn10086/article/details/72403899图片大小,设置的时候,一定要在最开始初始化得时候就去弄,你的其他命令可能是新建了另一个画图。比如错误:
plt.figure(figsize=(10,10))
fig,ax = plt.subplots(nrows=2,ncols=3)
https://www.cnblogs.com/nju2014/p/5620776.html这里具体讲述了这个关系。
这个过程应该说还是挺复杂的,不过最后这个图还算是可以接受。
1 #! /bin/python
2 #coding:utf-8
3 #2018/03/17
4 #Author:VChao
5
6 import matplotlib
7 matplotlib.use('Agg')
8
9
10 import matplotlib.pyplot as plt
11 from sklearn import datasets
12
13
14 att_array = [[0,1],[0,2],[0,3],
15[1,2],[1,3],[2,3]]
16
17 fig,ax = plt.subplots(figsize=(10,7.5),nrows=2,ncols=3)
18
19 def scatter_plt(i,x,y,t,one_ax,x_comment,y_comment):
20#row X col -> sub figure nums
21#i-> the num of nums,cordinate with the plt.subplot
22#x,y,t-> x axis ,y axis data ,t target
23
24#plt.figure(6 -i,figsize=(8,6))
25#plt.clf()
26one_ax.scatter(x,y,c=t)
27one_ax.set_xticks(())
28one_ax.set_yticks(())
29one_ax.set_xlabel(x_comment)
30one_ax.set_ylabel(y_comment)
31
32
33 def main():
34iris = datasets.load_iris()
35
36for i in range(len(att_array)):
37pass
38x = i % 2;
39y = i % 3;
40x_comment = iris.feature_names[att_array[i][0]]
41y_comment = iris.feature_names[att_array[i][1]]
42scatter_plt(i,iris.data[:,att_array[i][0]],
43iris.data[:,att_array[i][1]],
44iris.target,ax[x][y],x_comment,y_comment)
45
47plt.savefig("mul.png")
48
52 if __name__ == "__main__":
53main()
效果图:
文章图片
mul_plot 这里还差一点,图例。不过这里要明白一件事,就是我这个图例应该是所有子图都通用的,那么就应该是在figure这个对象上。初步理解,
不过查了挺多资料以后感觉,我这个环境下下面,添加图例有点小困难。
他们网上都是每次都是不一样的画图然后得到的这个不同的图例,而我是直接利用他自己的参数直接穿进去不同的东西了。也就是这个得到标签的中间代码没有写。
文章图片
带图例
图例的位置可以继续修改,这里就不进行修改了。
1 #! /bin/python
2 #coding:utf-8
3 #2018/03/17
4 #Author:VChao
5
6 import matplotlib
7 matplotlib.use('Agg')
8
9 import matplotlib.pyplot as plt
10 from sklearn import datasets
11
12
13 att_array = [[0,1],[0,2],[0,3],
14[1,2],[1,3],[2,3]]
15
16 fig,ax = plt.subplots(figsize=(10,7.5),nrows=2,ncols=3)
17
18 tmp1 = None
19 tmp2 = None
20 tmp3 = None
21
22 def scatter_plt(i,x,y,t,one_ax,x_comment,y_comment):
23#row X col -> sub figure nums
24#i-> the num of nums,cordinate with the plt.subplot
25#x,y,t-> x axis ,y axis data ,t target
26
27#plt.figure(6 -i,figsize=(8,6))
28#plt.clf()
29global tmp1,tmp2,tmp3
30tmp1 = one_ax.scatter(x[:50],y[:50],c="red",label="so")
31tmp2 = one_ax.scatter(x[50:100],y[50:100],c="blue",label="xx")
32tmp3 = one_ax.scatter(x[100:150],y[100:150],c="green",label="xx")
33
34one_ax.set_xticks(())
35one_ax.set_yticks(())
36one_ax.set_xlabel(x_comment)
37one_ax.set_ylabel(y_comment)
38
39 def main():
40iris = datasets.load_iris()
41
42for i in range(len(att_array)):
43pass
44x = i % 2;
45y = i % 3;
46x_comment = iris.feature_names[att_array[i][0]]
47y_comment = iris.feature_names[att_array[i][1]]
48scatter_plt(i,iris.data[:,att_array[i][0]],
49iris.data[:,att_array[i][1]],
50iris.target,ax[x][y],x_comment,y_comment)
51
52fig.legend((tmp1,tmp2,tmp3),["F","Y","X"],loc=2)
53plt.savefig("mul.png")
54
55 if __name__ == "__main__":
56main()
57
不过这样的代码感觉挺难看的。!!,不如一开始的那个简洁明了。
可能还有别的办法去获取。
对于画图就先到这个底部,后续再继续进行不足。其实后续大框架已经打好了,只需要配置到相应的图像就可以了。
2018/03/18
那本书《python机器学习系统设计》吧,好像是,比我处理的这个过程更好,主要他把数组处理的过程更加简化了。!!
后续再进行添加。
2018/03/24
对于多附图的代码,通过动态添加的方式会比上面这个更好。
https://www.jianshu.com/p/3edb07f58ecd