专栏名称: CDA数据分析师
CDA数据分析师品牌官方微信,开放、创新、分享。
目录
相关文章推荐
数据派THU  ·  记忆层增强的 Transformer ... ·  4 天前  
数据派THU  ·  登Science,MIT团队推出新蛋白质语言 ... ·  2 天前  
天池大数据科研平台  ·  反超DeepSeek!新版GPT-4o登顶竞 ... ·  19 小时前  
人工智能与大数据技术  ·  DeepSeek:那你很懂AI了 ·  3 天前  
51好读  ›  专栏  ›  CDA数据分析师

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

CDA数据分析师  · 公众号  · 大数据  · 2017-04-29 23:16

正文

前言


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

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

matplotlib


现在有很多工具都可以用来可视化数据,比如我们常用的 Excel ,还有数据科学另一门重要的语言 R ,以及百度的 Echarts 等可视化工具。今天我们的主角是 Python 中的 matplotlib 库(官网: 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()







请到「今天看啥」查看全文