python数据可视化实训答案 (用python数据可视化的图表的代码)

每日干货好文分享丨请点击+关注

对商业智能BI、数据分析挖掘、大数据、机器学习感兴趣的加微信tsbeidou,邀请你进入交流群。

欢迎关注天善智能微信公众号,专注于商业智能BI,大数据,数据分析领域。

准备工作

这章详细介绍并展示了教多matplotlib的功能。

打开Jupyter Notebook,导入需要的包,并配置好图片交互和中文显示环境:

import pandas as pd

import numpy as np

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

import matplotlib as mpl

import matplotlib.pyplot as plt

import matplotlib.cm as cm

%matplotlib inline

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

定义图表类型——柱状图、线形图和堆积柱状图

调用figure()方法,创建一个新的图表,接下来的绘图操作都在此图表中进行,参数figsize=(12,6)表示该图表的大小。

调用subplot(231)方法把图表分割成2行3列的网格,1表示图形的标号。

x = [1, 2, 3, 4]

y =[5, 4, 3, 2]

plt.figure(figsize=(12,6))

plt.subplot(231)

plt.plot(x,y) # 折线图

plt.subplot(232)

plt.bar(x,y) # 垂直柱状图

plt.subplot(233)

plt.barh(x,y) # 水平柱状图

plt.subplot(234)

plt.bar(x,y)

y1= [7,8,5,3]

plt.bar(x,y1,bottom=y,color='r') # 堆叠柱状图 设置参数bottom=y

plt.subplot(235)

plt.boxplot(x) # 箱线图

plt.subplot(236)

plt.scatter(x,y) # 散点图

plt.show()

用python数据可视化的图表的代码,python数据分析与可视化实训报告

具体解释下箱线图中的几个最重要的显示选项。

首先,我们可以添加从箱体延伸出来的箱须来展示数据集合的整个范围。箱体和箱须主要用于表现一个或多个数据集合中数据的编号,容易对数据进行对比而且易于理解。在同一个箱线图中可以呈现5种数据。

最小值:数据集合的最小值。

第二四分位数:其以下为数据集合中较低的25%数据。

中值:数据集合的中值

第三四分位数:其以上为数据集合中较高的25%数据。

最大值:给定数据集合的最大值。

dataset = [113, 115, 119, 121, 124,

124, 125, 126, 126, 126,

127, 127, 128, 129, 130,

130, 131, 132, 133, 136]

plt.figure(figsize=(10,6))

plt.subplot(121)

plt.boxplot(dataset, vert = False)

plt.subplot(122)

plt.hist(dataset)

plt.show()

用python数据可视化的图表的代码,python数据分析与可视化实训报告

我们用同一个数据集合来绘制箱线图和直方图,观察两种图表在数据展现上的差异。左图呈现了五个统计数据,右图展示了数据集合在给定范围内的分组情况。

简单的正弦图和余弦图

我们对从-Pi到Pi之间具有相同线性距离的256个点来计算正弦值和余弦值,然后把sin(x)值和cos(x)值在用以图表中绘制出来。

x = np.linspace(-np.pi, np.pi, 256, endpoint=True)

y = np.cos(x)

y1 = np.sin(x)

plt.figure(figsize=(10,6))

plt.plot(x, y)

plt.plot(x, y1)

plt.title("Functions $\sin$ and $\cos$") #设置图标题

plt.xlim(-3.0, 3.0) #设置x轴范围

plt.ylim(-1.0, 1.0) #设置y轴范围

plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],

[r'$-\pi

, r'$-\pi/2

, r'$0

, r'$+\pi/2

, r'$+\pi

]) # 用希腊字母标注x轴标签

plt.yticks([-1, 0, +1],

[r'$-1

, r'$0

, r'$+1

])

plt.show()

用python数据可视化的图表的代码,python数据分析与可视化实训报告

设置坐标轴长度和范围

如果不实用axis()或者其他参数设置,matplotlib会自动使用最小值,刚好可以让我们在一个图中看到所有的数据点。调用autoscale()方法,会以坐标轴的最佳大小适应数据的显示。

axis()里面的值分别表示坐标轴上xmin、xmax、ymin、ymax

axhline()表示绘制了一条y=0的水平线

axvline()表示绘制了一条x=0的垂直线

axhline(4)表示绘制了一条y=4的水平线

l=[-1, 1, -10, 10]

plt.axis(l)

plt.axhline()

plt.axvline()

plt.axhline(4)

用python数据可视化的图表的代码,python数据分析与可视化实训报告

设置图表的线型、属性和格式化字符串

常见的线条样式:

- 直线

--虚线

-. -.形式

: 细小虚线

常见的点样式:

s--方形

h--六角形

H--六角形

*--星号

+--加好

x--x型

d--菱形

D--菱形

p--五角形

常见的颜色样式:

c-cyan--青色

r-red--红色

m-magente--品红

g-green--绿色

b-blue--蓝色

y-yellow--黄色

k-black--黑色

w-white--白色

# plot(x轴数据,y轴数据,展现形式)

x = [1, 2, 3, 4, 8]

y = [5, 7, 2, 1, 5]

plt.plot(x, y, '-', color='g', linewidth=0.8)

plt.plot(x, y,'*',color='r') #散点图

plt.show()

用python数据可视化的图表的代码,python数据分析与可视化实训报告

设置刻度、刻度标签和网格

刻度是图形的一部分,由刻度*位器定**(指定刻度所在的位置)和刻度格式器(指定刻度显示的样式)组成。刻度有主刻度和次刻度,默认次刻度不显示。

locator_params()方法控制刻度*位器定**,可以控制刻度的数目。

plt.figure(figsize=(10,6))

# 获取当前坐标

ax = plt.gca()

# 设置紧凑视图,设置刻度间隔最大为10

ax.locator_params(tight=True, nbins = 10)

# 生成100个正态分布值

ax.plot(np.random.normal(10, .1, 100))

plt.show()

用python数据可视化的图表的代码,python数据分析与可视化实训报告

使用dates模块的一个例子来说明刻度格式器的配置。刻度格式器规定了值的显示方式。

import datetime

fig = plt.figure(figsize=(10,6))

# 获取当前的坐标轴

ax = plt.gca()

# 设置一些日期区间

start = datetime.datetime(2013, 01, 01)

stop = datetime.datetime(2013, 12, 31)

delta = datetime.timedelta(days = 1)

# 转换日期

dates = mpl.dates.drange(start, stop, delta)

# 产生一些随机值

values = np.random.rand(len(dates))

ax = plt.gca()

# 用日期值画图

ax.plot_date(dates, values, linestyle='-', marker='')

# 指定格式

date_format = mpl.dates.DateFormatter('%Y-%m-%d')

# 应用格式

ax.xaxis.set_major_formatter(date_format)

# 自动格式日期标签

fig.autofmt_xdate()

plt.show()

用python数据可视化的图表的代码,python数据分析与可视化实训报告

添加图例和注解

图例和注解清洗连贯地解释了数据图表的内容。通过给给个plot添加一个关于所显示数据的简短描述,能让观察者更容易理解。

在每个plot中指定了一个字符串标签(label),这样legend()会把它们添加到图例框中。通过loc参数确定图例框的位置。

annotate()可以为xy坐标位置的数据点添加字符串描述。通过设置xycoord='data',可以指定注解和数据使用相同的坐标系,注解文本的起始位置通过xytext指定。

箭头由xytext指向xy坐标位置。arrowstyle指定了箭头风格。

plt.figure(figsize=(10, 6))

# 生成不同正态分布值

x1 = np.random.normal(30, 3, 100)

x2 = np.random.normal(20, 2, 100)

x3 = np.random.normal(10, 3, 100)

# 在同张画布里画3条线

plt.plot(x1, label='plot')

plt.plot(x2, label='2nd plot')

plt.plot(x3, label='3nd plot')

# 生成图例框

plt.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3, ncol=3, mode="expand", borderaxespad=0.)

# 注解重要值

plt.annotate("Important value:(55, 20)", (55, 20), xycoords='data', xytext=(5, 38), arrowprops=dict(arrowstyle='->'))

plt.show()

用python数据可视化的图表的代码,python数据分析与可视化实训报告

移动轴线到图中央

轴线定义了数据区域的边界,把坐标轴刻度标记连接起来。一共有四个轴线,可以把它们放置在任何位置。默认情况下,它们被放置在坐标轴的边界。

为了把轴线移到图中央,需要把其中两个轴线隐藏起来(设置color为none)。然后,移动另外两个到坐标(0,0)。坐标为数据空间坐标。

x = np.linspace(-np.pi, np.pi, 500, endpoint=True)

y = np.sin(x)

plt.plot(x, y)

ax = plt.gca()

ax.spines['right'].set_color('none') # 隐藏右边的轴线

ax.spines['top'].set_color('none') # 隐藏顶端的轴线

ax.spines['bottom'].set_position(('data', 0)) # 移动底端的轴线到(0,0)

ax.spines['left'].set_position(('data', 0)) # 移动左端的轴线到(0,0)

ax.xaxis.set_ticks_position('bottom') # 移动底端的刻度到x轴

ax.yaxis.set_ticks_position('left') # 移动左侧的刻度到x轴

plt.show()

用python数据可视化的图表的代码,python数据分析与可视化实训报告

绘制直方图

直方图被用于可视化数据的分布估计。表示一定间隔下数据点频率的垂直矩阵称为bin。bin以固定的间隔创建,因此直方图的总面积等于数据点的数量。

直方图可以显示数据的相对频率,而不是使用数据的绝对值。在这种情况下,总面积等于1。

mu = 100

sigma = 15

x = np.random.normal(mu, sigma, 10000)

ax = plt.gca()

ax.hist(x, bins=35, color='r', normed=True) # normed=True ,直方图的值将进行归一化处理,形成概率密度。默认值为False

ax.set_xlabel('值')

ax.set_ylabel('频率')

ax.set_title(r'$\mathrm{Histogram:}\ \mu=%d,\ \sigma=%d

% (mu, sigma))

plt.show()

用python数据可视化的图表的代码,python数据分析与可视化实训报告

绘制误差条形图

误差条可以用来可视化数据集中的测量不确定度或者指出错误。

经常使用到的参数:

xerr和yerr:用于在柱状图上生成误差条。

width:给定误差条的宽度,默认值是0.8.

bottom:如果指定了bottom,其值会加到高度中,默认值为None。

edgecolor:给定误差条边界颜色。

ecolor:指定误差条的颜色。

linewidth:误差条边界宽度,可以设为None(默认值)和0(此时误差条边界将不显示出来)

orientation:有vertical和horizontal两个值。

x = np.arange(0, 10, 1)

y = np.log(x)

xe = 0.1 * np.abs(np.random.randn(len(y)))

plt.bar(x, y, yerr=xe, width=0.4, align='center', ecolor='r', color='cyan', label='experiment #1')

plt.xlabel('# measurement')

plt.ylabel('Measured values')

plt.title('Measurements')

plt.legend(loc='upper left')

plt.show()

用python数据可视化的图表的代码,python数据分析与可视化实训报告

绘制饼图

饼图显示的数据集合加起来必须等于100%,否则它就是无意义的、无效的。

饼图描述数值的比例关系,其中每个扇区的弧长大小为其所表示的数量的比例。

饼图的缺点:

1.难以对数量进行比较。

2.以特定角度的方式和一定颜色的扇形展示数据,会使我们的感觉有倾向性,从而影响我们对于所呈现数据得到的结论。

plt.figure(figsize=(6, 6))

ax = plt.axes([0.1, 0.1, 0.8, 0.8])

labels = 'Spring', 'Summer', 'Autumn', 'Winter'

# 饼图的每部分定义为x/sum(x),或者为x if sum(x)<=1

x = [15, 30, 45, 10]

# 给定一个分裂序列,每一个元素表示每个圆弧间偏移量,为半径的百分比

explode = (0.1, 0.1, 0.1, 0.1)

# 如果没有指定startangle,扇区将从x轴开始逆时针排列,如果指定的值为90,饼图将从y轴开始

# autpct参数用来格式化绘制在圆弧中的标签

plt.pie(x, explode=explode, labels=labels, autopct='%1.1f%%', startangle=67)

plt.title('Rainy days by season')

plt.show()

用python数据可视化的图表的代码,python数据分析与可视化实训报告

绘制带填充区域的图表

对曲线间或者曲线下面的区域填充颜色,这对我们理解给定的特定信息是非常有必要的。

x = np.arange(0.0, 2, 0.01)

y1 = np.sin(2*np.pi*x)

y2 = 1.2*np.sin(4*np.pi*x)

fig = plt.figure(figsize=(10, 6))

ax = plt.gca()

# 绘制出两个信号的图形

ax.plot(x, y1, x, y2, color='black')

# fill_between()方法使用x为定位点选取y值(y1,y2),用where参数指定条件来填充曲线,where参数接手布尔值(可以是表达式)

ax.fill_between(x, y1, y2, where=y2>=y1, facecolor='darkblue', interpolate=True)

ax.fill_between(x, y1, y2, where=y2<=y1, facecolor='deeppink', interpolate=True)

ax.set_title('filled between')

plt.show()

用python数据可视化的图表的代码,python数据分析与可视化实训报告

绘制带彩色标记的散点图

散点图显示两组数据的值。散点图可以作为更高级的多维数据可视化的基础,比如绘制散点图矩阵。

散点图通常在应用拟合回归之前绘制,用来识别两个变量间的关联。

x = np.random.randn(1000)

# y1为随机值,与x不相关

y1 = np.random.randn(len(x))

# y2与x强相关

y2 = 1.2 + np.exp(x)

fig = plt.figure(figsize=(10, 6))

ax1 = plt.subplot(121)

# marker参数用来设置点状标记(默认为circle),alpha参数表示透明度,edgecolors参数表示标记的边界颜色,label参数用于图例框

plt.scatter(x, y1, color='indigo', alpha=0.3, edgecolors='white', label='no correl')

plt.xlabel('no correlation')

plt.grid(True)

plt.legend()

ax2 = plt.subplot(122, sharey=ax1, sharex=ax1)

plt.scatter(x, y2, color='green', alpha=0.3, edgecolor='grey', label='correl')

plt.xlabel('strong correlation')

plt.grid(True)

plt.legend()

plt.show()

用python数据可视化的图表的代码,python数据分析与可视化实训报告

友情提示:

天善智能是国内最大的商业智能BI、数据分析、大数据领域社区,欢迎大家登陆天善学院有更多免费行业专家数据库,商业智能BI,数据分析,大数据,数据挖掘视频和干货好文分享。

参加每周四的公开课分享活动,请加微信:tsbeidou(备注:公司+行业+姓名)。

12月22日晚8:30 Spark网站流量异常大规模检测案例实战

12月29日晚8:30 Oracle甲骨文BI大数据在银行和保险业的应用

用python数据可视化的图表的代码,python数据分析与可视化实训报告

更多内容欢迎登陆:https://www.hellobi.com/ 。