社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

【干货】Python使用matplotlib实现数据可视化

CDA数据分析师 • 9 年前 • 1252 次点击  

前言


俗话说得好,一图胜千言。数据可视化是数据科学中的一个重要部分。创建可视化很简单,但是创建优秀的可视化很难。

数据可视化有两种主要用途:探索数据和交流数据。

matplotlib


现在有很多工具都可以用来可视化数据,比如我们常用的Excel,还有数据科学另一门重要的语言R,以及百度的Echarts等可视化工具。今天我们的主角是Python中的matplotlib库(官网:http://img2.100weidu.com/get?src=http:// matplotlib.org),相对来说,matplotlib功能不是最强大的,但是对于基本的图形来说,matplotlib很好用。


安装matplotlib:如果你已经安装了Python的pip工具,那么你只需要pipinstall matplotlib即可安装。这是最简单的一种方法,建议使用这种方法。


这里我们使用的是matplotlib.pyplot模块。pyplot保持着一种内部状态,你可以一步步创建可视化。一旦创建工作完成,就可以保存了(用savefig())或显示(用show())你的图形。

下面我们就来简单的画一个折线图。大家都知道达康书记比较关系GDP,一心想着提升GDP,我们就简单的让GDP增长起来吧。下面看一下代码和视图:

#折线图
from matplotlib import pyplot as plt
#设置字体,显示中文
from pylab import *
from pylab import mpl  
mpl.rcParams['font.sans-serif'] = ['SimHei']  

#这里只是作图示例,与真实数据无关
years = [2010, 2011, 2012, 2013, 2014, 2015, 2016]
gdp = [300.2, 520, 1024, 2800.5, 5868.9, 9999.9, 14998.8]

#创建一幅线图,x轴是年份,y轴是gdp
plt.plot(years, gdp, color = 'green', marker = 'o', linestyle = 'solid')

#添加一个标题
plt.title("人民的名义GDP")

#给y轴加标记
plt.ylabel(r"十亿元")
plt.ticklabel_format(useOffset=False)
plt.show()

条形图


如果我们想展示一些离散的项目集合中的数量是如何变化的,可以使用条形图。比如:下图显示了几个人拥有的硬币数量。

#条形图
from matplotlib import pyplot as plt
#设置字体,显示中文
from pylab import mpl  
mpl.rcParams['font.sans-serif'] = ['SimHei']

coins = ['ming', 'hong', 'monkey', 'dakang', 'ruijin']
num_coins = [5, 4, 3, 8, 10]

#条形的默认宽度是0.8,因此我们对左侧坐标加0.1,这样条形就放在中心了
xs = [i + 0.1 for i, _ in enumerate(coins)]

#使用左侧x坐标[xs]和高度[num_coins]画条形图
plt.bar(xs, num_coins)

plt.ylabel("硬币数量")
plt.title("每人拥有硬币数量")

#使用人名标记x轴,位置在x轴上条形的中心
plt.xticks([i + 0.5 for i, _ in enumerate(coins)], coins)

plt.show()


条形图也可以用来绘制拥有大量数值取值的变量直方图,以此来探索这些取值是如何分布的。如下图所示。

#直方图
from matplotlib import pyplot as plt
from collections import Counter
#设置字体,显示中文
from pylab import mpl  
mpl.rcParams['font.sans-serif'] = ['SimHei']

grades = [83, 95, 87, 70, 0, 85, 82, 100, 67, 73, 77, 0]
decile = lambda grade:grade //10*10
histogram = Counter(decile(grade) for grade in grades)

#每个条形向左侧移动4个单位,给每个条形设置正确的高度,条形宽度设置为8
plt.bar([x - 4 for x in histogram.keys()], histogram.values(), 8)

plt.axis([-5, 105, 0, 5])   #x轴取值-5到105,y轴取值0到5

plt.xticks([10*i for i in range(11)])   #x轴标记为0,10,。。。100
plt.xlabel("十分相")
plt.ylabel("学生数")
plt.title("考试分数分布图")
plt.show()

线图


前面说过,可以用plt.plot()来制作线图,这种图形可以涌过来清晰地显示某种事物的趋势。代码和图如下所示:

#线图
from matplotlib import pyplot as plt
#设置字体,显示中文
from pylab import mpl  
mpl.rcParams['font.sans-serif'] = ['SimHei']
variance = [1, 2, 4, 8, 16, 32, 64, 128, 256]
bias_squared = [256, 128, 64, 32, 16, 8, 4, 2, 1]
table_error = [x+y for x, y in zip(variance, bias_squared)]
xs = [i for i,_ in enumerate(variance)]

#可以多次调用plt.plot方便在同一个图上显示多个序列
plt.plot(xs, variance,      'g-', label = 'variance')       #绿色实线
plt.plot(xs, bias_squared,  'r-.', label = 'bias_squared')  #红色点虚线
plt.plot(xs, table_error,   'b:', label = 'table error')    #蓝色点线

#loc=9表示”顶部中央“
plt.legend(loc=9)
plt.xlabel("模型复杂度")
plt.title("偏差-方差权衡图")
plt.show()

散点图


散点图是显示成对数据集的可视化关系的比较好的方法,比如画一个你微信的好友数,和你每天使用微信的时间之间的关系。看一下代码和示例图:

#散点图
from matplotlib import pyplot as plt
#设置字体,显示中文
from pylab import mpl  
mpl.rcParams['font.sans-serif'] = ['SimHei']

friends = [70, 65, 72, 63, 71, 64, 60, 64, 67]
minutes = [175, 170, 205, 120, 220, 130, 105, 145, 190]
labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

plt.scatter(friends, minutes)

#每个点加标记
for label, friend_count, minute_count in zip(labels, friends, minutes):
    plt.annotate(label,
                 xy = (friend_count, minute_count), #把标记放在对应的点上
                 xytext = (-5, 5),                  #但要有轻微偏离
                 textcoords = 'offset points')
plt.title("日分钟数与朋友数")
plt.xlabel("朋友数")
plt.ylabel("花在微信上的日分钟数")
plt.show()

小结


今天学习一下Python中使用matplotlib进行数据可视化,数据分析必须做到可视化。希望通过上面的操作能帮助大家。如果你有什么好的意见,建议,或者有不同的看法,我都希望你留言和我们进行交流、讨论。

欢迎关注微信公众号,访问更多精彩:AiryData。

如需转载,请联系授权,谢谢合作。




数据之美

www.airyyun.com

长按二维码关注我们




点击下方“阅读原文”查看更多内容。

今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/weixin/gu68nO5wfV
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/1884