内容简介:讲道理,Python数据可视化是优雅的艺术
最近看《机器学习系统设计》…前两章。学到了一些用Matplotlib进行数据可视化的方法。在这里整理一下。
声明:由于本文的代码大部分是参考书中的例子,所以不提供完整代码,只提供示例片段,也就是只能看出某一部分用法,感兴趣的需要在自己的数据上学习测试。
最开始,当然还是要导入我们需要的包:
# -*- coding=utf-8 -*- from matplotlib import pyplot as plt from sklearn.datasets import load_iris import numpy as np import itertools1234512345
1. 画散点图
画散点图用plt.scatter(x,y)。画连续曲线在下一个例子中可以看到,用到了plt.plot(x,y)。
plt.xticks(loc,label)可以自定义x轴刻度的显示,第一个参数表示的是第二个参数label显示的位置loc。
plt.autoscale(tight=True)可以自动调整图像显示的最佳化比例 。
plt.scatter(x,y) plt.title("Web traffic") plt.xlabel("Time") plt.ylabel("Hits/hour") plt.xticks([w*7*24 for w in range(10)],['week %i' %w for w in range(10)]) plt.autoscale(tight=True) plt.grid() ##plt.show()1234567812345678
画出散点图如下:
2. 多项式拟合并画出拟合曲线
## 多项式拟合
fp2 = np.polyfit(x,y,3) f2 = np.poly1d(fp2) fx = np.linspace(0,x[-1],1000) plt.plot(fx,f2(fx),linewidth=4,color='g') ## f2.order: 函数的阶数 plt.legend(["d=%i" % f2.order],loc="upper right") plt.show()123456789123456789
效果图:
3. 画多个子图
这里用到的是sklearn的iris_dataset(鸢尾花数据集)。
此数据集包含四列,分别是鸢尾花的四个特征:
- sepal length (cm)——花萼长度
- sepal width (cm)——花萼宽度
- petal length (cm)——花瓣长度
- petal width (cm)——花瓣宽度
这里首先对数据进行一定的处理,主要就是对特征名称进行两两排列组合,然后任两个特征一个一个做x轴另一个做y轴进行画图。
# -*- coding=utf-8 -*- from matplotlib import pyplot as plt from sklearn.datasets import load_iris import numpy as np import itertools data = load_iris() #print(data.data) #print(data.feature_names) #print(data.target) features = data['data'] feature_names = data['feature_names'] target = data['target'] labels = data['target_names'][data['target']] print(data.data) print(data.feature_names)123456789101112131415161718123456789101112131415161718
这里有一个排列组合参考代码,最后是取出了两两组合的情况。
排列组合的结果是feature_names_2包含了排列组合的所有情况,它的每一个元素包含了一个排列组合的所有情况,比如第一个元素包含了所有单个元素排列组合的情况,第二个元素包含了所有的两两组合的情况……所以这里取出了第二个元素,也就是所有的两两组合的情况
feature_names_2 = [] #排列组合 for i in range(1,len(feature_names)+1): iter = itertools.combinations(feature_names,i) feature_names_2.append(list(iter)) print(len(feature_names_2[1])) for i in feature_names_2[1]: print(i)123456789123456789
下面是在for循环里画多个子图的方法。对我来说,这里需要学习的有不少。比如
for i,k in enumerate(feature_names_2[1]):这一句老是记不住。
比如从列表中取出某元素所在的索引的方法:index1 = feature_names.index(k[0]),也即index = list.index(element)的形式。
比如for循环中画子图的方法:plt.subplot(2,3,1+i)
比如for循环的下面这用法:for t,marker,c in zip(range(3),”>ox”,”rgb”):
plt.figure(1) for i,k in enumerate(feature_names_2[1]): index1 = feature_names.index(k[0]) index2 = feature_names.index(k[1]) plt.subplot(2,3,1+i) for t,marker,c in zip(range(3),">ox","rgb"): plt.scatter(features[target==t,index1],features[target==t,index2],marker=marker,c=c) plt.xlabel(k[0]) plt.ylabel(k[1]) plt.xticks([]) plt.yticks([]) plt.autoscale() plt.tight_layout() plt.show()12345678910111213141234567891011121314
这里的可视化效果如下:
4. 画水平线和垂直线
比如在上面最后一幅图中,找到了一种方法可以把三种鸢尾花分出来,这是我们需要画出模型(一条直线)。这个时候怎么画呢?
下面需要注意的就是plt.vlines(x,y_min,y_max)和plt.hlines(y,x_min,x_max)的用法。
plt.figure(2) for t,marker,c in zip(range(3),">ox","rgb"): plt.scatter(features[target==t,3],features[target==t,2],marker=marker,c=c) plt.xlabel(feature_names[3]) plt.ylabel(feature_names[2]) # plt.xticks([]) # plt.yticks([]) plt.autoscale() plt.vlines(1.6, 0, 8, colors = "c",linewidth=4,linestyles = "dashed") plt.hlines(2.5, 0, 2.5, colors = "y",linewidth=4,linestyles = "dashed") plt.show() 12345678910111234567891011
此时可视化效果如下:
5. 动态画图
plt.ion()打开交互模式。plt.show()不再阻塞程序运行。
注意plt.axis()的用法。
plt.axis([0, 100, 0, 1]) plt.ion() for i in range(100): y = np.random.random() plt.autoscale() plt.scatter(i, y) plt.pause(0.01)1234567812345678
可视化效果:
以上所述就是小编给大家介绍的《讲道理,Python数据可视化是优雅的艺术》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 遇见大数据可视化:来做一个数据可视化报表
- 遇见大数据可视化: 未来已来,变革中的数据可视化
- Python 数据可视化 2018:数据可视化库为什么这么多?
- 数据可视化设计(1)情感化设计指导可视化设计理念
- 基于WebGL架构的ThingJS可视化平台—城市地下管线3D可视化
- 可视化工具不知道怎么选?深度评测5大Python数据可视化工具
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Designing Data-Intensive Applications
Martin Kleppmann / O'Reilly Media / 2017-4-2 / USD 44.99
Data is at the center of many challenges in system design today. Difficult issues need to be figured out, such as scalability, consistency, reliability, efficiency, and maintainability. In addition, w......一起来看看 《Designing Data-Intensive Applications》 这本书的介绍吧!
HTML 压缩/解压工具
在线压缩/解压 HTML 代码
XML 在线格式化
在线 XML 格式化压缩工具