JMUrjxh数据分析与实践——Matplotlib接口和常用图形

一、画图接口

1、导入matplotlib

和numpy,pandas一样,在导入matplotlib时我们也可以用一些常用的简写形式:

import matplotlib as mpl

import matplotlib.pyplot as plt

pyplot是最常用的画图模块接口,功能非常强大。

2、显示图像

开发环境的不同,显示图像的方式也就不一样,一般有三种开发环境,分别是脚本、IPython shell、IPython Notebook。

在脚本中使用matplotlib进行可视化时显示图像可以使用plt.show()。

在IPython shell中使用matplotlib可视化非常方便,使用%matplotlib命令启动matplotlib模式。之后的任何plt命令都会自动打开一个图像窗口,当有新的命令,图像就会更新。但对已经画好的图像不会自动实时更新。对于这种可以使用plt.draw()强制更新。

在IPython Notebook中画图和IPthon shell类似,也需要使用%matplotlib命令。图像的显示是嵌在IPython Notebook页面中。有两种展示形式:%matplotlib notebook交互式图形;%matplotlib inline静态图形。

matplotlib还可以直接将图像保存文件,通过plt.savefig("test.jpg")命令保存文件。

plt.savefig("test.jpg")

3、画图接口

matplotlib有两个画图接口:一个是便捷的matlab风格接口,另一个是功能更强大的面向对象接口。

matplotlib的matlab接口许多语法都和MATLAB类似。

import matplotlib.pyplot as plt#导入模块

plt.figure(figsize=(10,10))#创建图形,并设置大小为10 x 10

plt.subplot(2,1,1)#创建子图1(行,列,子图编号)

plt.plot([1,2,3,4], [1,2,3,4])

plt.subplot(2,1,2)#创建子图2(行,列,子图编号)

plt.plot([4,3,2,1], [1,2,3,4])

plt.show()

面向对象接口可以适应更加复杂的场景,更好地控制图形,在画比较复杂的图形市,面向对象方法会更方便。通过下面的代码,可以用面向对象接口重新创建之前的图形。

fig,ax=plt.subplots(2)#ax是一个包含2个axes对象的数组

ax[0].plot([1,2,3,4], [1,2,3,4])

ax[1].plot([4,3,2,1], [1,2,3,4])

plt.show()

二、线形图

适用场景: 折线图适合二维的大数据集,尤其是那些趋势比单个数据点更重要的场合。它还适合多个二维数据集的比较。

1、绘制线形图

在所有图形中,最简单的应该就是线性方程y = f (x) 的可视化了。来看看如何创建这个简单的线形图。要画Matplotlib图形时,都需要先创建一个图形fig 和一个坐标轴ax。创建图形与坐标轴的最简单做法是:

import matplotlib.pyplot as plt#导入模块

plt.style.use('seaborn-whitegrid')#设置matplotlib画图样式

fig = plt.figure()

ax = plt.axes()

在Matplotlib中,figure(plt.Figure类的一个实例)可以被看成是个能够容纳各种坐标轴、图形、文字和标签的容器。就像你在图中看到的那样,axes(plt.Axes类的一个实例)是一个带有刻度和标签的矩形,最终会包含所有可视化的图形元素。

在这里我们一般使用变量fig表示一个图形实例,用变量ax表示一个坐标轴实例。接下来使用ax.plot画图,从简单的正弦曲线开始:

fig = plt.figure()

ax = plt.axes()

x = np.linspace(0, 10, 1000)

ax.plot(x, np.sin(x))

也可以使用pylab接口画图,这时图形与坐标轴都在底层执行,执行结果和上图一样:plt.plot(x, np.sin(x))

试想下如果我们重复调用plot命令会发生什么,它会在一张图中创建多条线:

plt.plot(x, np.sin(x))

plt.plot(x, np.cos(x))

2、设置颜色和风格

在画图的过程中通常对图形的第一次调整是调整它线条的颜色与风格。

plt.plot()函数可以通过相应的参数设置颜色和风格,修改颜色使用color参数,它支持各种颜色值的字符串,具体使用如下:

plt.plot(x, np.sin(x - 0), color='blue') # 标准颜色名称

plt.plot(x, np.sin(x - 1), color='g') # 缩写颜色代码(rgbcmyk)

plt.plot(x, np.sin(x - 2), color='0.75') # 范围在0~1的灰度值

plt.plot(x, np.sin(x - 3), color='#FFDD44') # 十六进制(RRGGBB,00~FF)

plt.plot(x, np.sin(x - 4), color=(1.0,0.2,0.3)) # RGB元组,范围在0~1

plt.plot(x, np.sin(x - 5), color='chartreuse') # HTML颜色名称

3、常用颜色对应值:

取值颜色

b blue

g green

r red

c cyan

m magenta

y yellow

k black

w white

如果不指定颜色,matplotlib会为多条线自动循环使用一组默认的颜色。设置样式使用linestyle参数:

plt.plot(x, x + 0, linestyle='solid')

plt.plot(x, x + 1, linestyle='dashed')

plt.plot(x, x + 2, linestyle='dashdot')

plt.plot(x, x + 3, linestyle='dotted')

#也可以用下面的简写形式

plt.plot(x, x + 4, linestyle='-') # 实线

plt.plot(x, x + 5, linestyle='--') # 虚线

plt.plot(x, x + 6, linestyle='-.') # 点划线

plt.plot(x, x + 7, linestyle=':') # 实点线

还可以将linestyle和color编码组合起来,作为plt.plot()函数的一个非关键字参数使用:

plt.plot(x, x + 0, '-g') # 绿色实线

plt.plot(x, x + 1, '--c') # 青色虚线

plt.plot(x, x + 2, '-.k') # 黑色点划线

plt.plot(x, x + 3, ':r'); # 红色实点线

4、设置坐标轴上下限

虽然matplotlib会自动为你的图形选择最合适的坐标轴上下限,但是有时自定义坐标轴上下线可能会更好。调整坐标轴上下限最基础的方式是plt.xlim()和plt.ylim():

plt.plot(x, np.sin(x))

plt.xlim(-1, 11)

plt.ylim(-1.5, 1.5)

如果你想要让坐标轴逆序显示,那么只需要逆序设置坐标轴刻度值就可以了。matplotlib还有一个方法是plt.axis()。通过传入[xmin,xmax,ymin,ymax]对应的值,这样就可以用一行代码设置x和y的限值:

plt.plot(x, np.sin(x))

plt.axis([-1, 11, -1.5, 1.5])

还支持按照图形的内容自动收紧坐标轴,不留空白区域:

plt.plot(x, np.sin(x))

plt.axis('tight')

5、设置图形标签

图形标签与坐标轴标题是最简单的标签,设置方法如下:

plt.plot(x, np.sin(x))

plt.title("A Sine Curve")

plt.xlabel("x")

plt.ylabel("sin(x)");

三、散点图

适用场景:散点图适用二维或三维的数据集。比如相关性分析、 数据分布情况。

1、plot绘制散点图

散点图也是在数据科学中常用图之一,前面我们学习了使用plt.plot/ax.plot画线形图的方法。同样的,现在用这些函数来画散点图:

x = np.linspace(0, 10, 30)

y = np.sin(x)

plt.plot(x, y, 'o', color='black')

函数的第三个参数是一个字符,表示图形符号的类型。与我们之前用-和--设置线条属性类似,对应的图形标记也有缩写形式。

rng = np.random.RandomState(0)

for marker in ['o', '.', ',', 'x', '+', 'v', '^', '<', '>', 's', 'd']:

plt.plot(rng.rand(5), rng.rand(5), marker,label="marker='{0}'".format(marker))

plt.legend(numpoints=1)

plt.xlim(0, 1.8);

plt.savefig("T1.png")

plt.show()

常用标记如下:

取值含义

. point marker

, pixel marker

o circle marker

v triangle_down marker

^ triangle_up marker

< triangle_left marker

> triangle_right marker

1 tri_down marker

2 tri_up marker

3 tri_left marker

4 tri_right marker

s square marker

p pentagon marker

* star marker

h hexagon1 marker

H hexagon2 marker

+ plus marker

x x marker

D diamond marker

d thin_diamond marker

&#124; vline marker

_ hline marker

plt.plot函数非常灵活,可以满足各种不同的可视化配置需求。关于具体配置的完整描述,由于篇幅有限,请参考plt.plot文档。

2、scatter画散点图

另一个可以创建散点图的函数是plt.scatter。它的功能非常强大,其用法与plt.plot函数类似:

x = np.linspace(0, 10, 30)

y = np.sin(x)

plt.scatter(x, y, marker='o');

结果和前面plt.plot画的一样。plt.scatter和plt.plot的主要差别在于,前者在创建散点图时具有更高的灵活性,可以单独控制每个散点与数据匹配,也可以让每个散点具有不同的属性(大小、颜色等)。

接下来画一个随机散点图,里面有各种颜色和大小的散点。为了能更好的显示重叠部分,用alpha参数来调整透明度:

rng = np.random.RandomState(0)

x = rng.randn(100)

y = rng.randn(100)

colors = rng.rand(100)

sizes = 1000 * rng.rand(100)

plt.scatter(x, y, c=colors, s=sizes, alpha=0.3,

cmap='viridis')

plt.colorbar() # 显示颜色条

这里散点的大小以像素为单位。颜色为浮点数,自动映射成颜色条(color scale,通过colorbar()显示)。当取值为浮点数时,它所对应的颜色则是对应的colormap上对应长度的取值,colormap就像以下这样的条带:

这样,散点的颜色与大小就可以在可视化图中显示多维数据的信息了。例如,可以使用sklearn程序库中的鸢尾花数据来演示。它里面有三种花,每个样本是一种花,其花瓣与花萼的长度与宽度都经过了测量:

from sklearn.datasets import load_iris

iris = load_iris()

features = iris.data.T#加载数据

plt.scatter(features[0], features[1], alpha=0.2,

s=100*features[3], c=iris.target, cmap='viridis')

plt.xlabel(iris.feature_names[0])

plt.ylabel(iris.feature_names[1]);

散点图可以让我们同时看到不同维度的数据:每个点的坐标值(x, y)分别表示花萼的长度和宽度,而点的大小表示花瓣的宽度,三种颜色对应三种不同类型的鸢尾花。

这类多颜色与多特征的散点图在探索与演示数据时非常有用。

3、plot与scatter效率对比

plot与scatter除了特征上的差异之外,在数据量较大时,plot的效率将大大高于scatter。

这时由于scatter会对每个散点进行单独的大小与颜色的渲染,因此渲染器会消耗更多的资源。而在plot中,散点基本都彼此复制,因此整个数据集中的所有点的颜色、大小只需要配置一次。所以面对大型数据集时,plot方法比scatter方法好。

四、直方图

适用场景:和柱状图类似,适合用于展示二维数据集,展示数据的分布情况,其中一个轴表示需要对比的分类维度,另一个轴代表相应的数值。

1、直方图的定义

单从外表上看直方图和条形图非常相似。首先需要区分清楚概念:直方图和条形图。

条形图用长条形表示每一个类别,长条形的长度表示类别的频数,宽度表示表示类别。

直方图是一种统计报告图,形式上也是一个个的长条形,但是直方图用长条形的面积表示频数,所以长条形的高度表示频数组距,宽度表示组距,其长度和宽度均有意义。当宽度相同时,一般就用长条形长度表示频数。

2、绘制直方图

直方图一般用来描述等距数据。直观上,直方图各个长条形是衔接在一起的,表示数据间的数学关系。

import matplotlib.pyplot as plt

import numpy as np

import matplotlib

# 设置matplotlib正常显示中文和负号

matplotlib.rcParams['font.sans-serif']=['SimHei'] # 用黑体显示中文

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

# 随机生成(10000,)服从正态分布的数据

data = np.random.randn(10000)

plt.hist(data,bins=30, normed=0, facecolor="red", alpha=0.7)

# 显示横轴标签

plt.xlabel("区间")

# 显示纵轴标签

plt.ylabel("频数/频率")

# 显示图标题

plt.title("频数/频率分布直方图")

参数 作用

data 必选参数,绘图数据

bins 直方图的长条形数目,可选项,默认为10

normed 是否将得到的直方图向量归一化,可选项,默认为0,代表不归一化,显示频数。normed=1,表示归一化,显示频率。

facecolor 长条形的颜色

edgecolor 长条形边框的颜色

alpha 透明度

五、饼图

适用场景:适用于二维数据,即一个分类字段,一个连续数据字段,当用户更关注与简单占比时,适合使用饼图。

1、饼图

饼图又称圆饼图、圆形图等,它是利用圆形及圆内扇形面积来表示数值大小的图形。饼图主要用于总体中各组成部分所占比重的研究。

2、绘制饼图

matplotlib用来绘制饼图的函数是pie()。常用参数如下:

参数 作用

x (每一块的比例,如果sum(x) > 1会使用sum(x)归一化

labels 饼图外侧显示的说明文字

explode (每一块)离开中心距离

startangle 起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起

shadow 在饼图下面画一个阴影。默认值:False,即不画阴影

autopct 控制饼图内百分比设置

radius 控制饼图半径,默认值为1

wedgeprops 字典类型,可选参数,默认值:None。参数字典传递给wedge对象用来画一个饼图。

labels = 'A B','C','D'

sizes = [10,20,10,60]

plt.pie(sizes,labels=labels,explode = (0,0.1,0,0),autopct='%1.1f')

plt.show()

3、嵌套饼图

嵌套饼图通常被称为空心饼图图表。空心饼图形状的效果是通过wedgeprops参数设置馅饼楔形的宽度来实现的:

fig, ax = plt.subplots()

size = 0.3

vals = np.array([[60., 32.], [37., 40.], [29., 10.]])

cmap = plt.get_cmap("tab20c")

outer_colors = cmap(np.arange(3)*4)

inner_colors = cmap(np.array([1, 2, 5, 6, 9, 10]))

ax.pie(vals.sum(axis=1), radius=1, colors=outer_colors,

wedgeprops=dict(width=size, edgecolor='w') )

ax.pie(vals.flatten(), radius=1-size, colors=inner_colors,

wedgeprops=dict(width=size, edgecolor='w'))

ax.set(aspect="equal" )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Matplotlib是一个Python数据可视化库,提供了丰富的绘图接口常用图形,包括: 1. 折线图(Line Plot):用于展示数据随时间或其他连续变量的变化趋势。 2. 散点图(Scatter Plot):用于展示两个变量之间的关系,可以用不同颜色或大小的点表示不同的数据。 3. 条形图(Bar Plot):用于比较不同类别之间的数值大小。 4. 直方图(Histogram):用于展示数据的分布情况,可以看出数据的中心趋势和离散程度。 5. 饼图(Pie Chart):用于展示不同类别之间的占比情况。 6. 箱线图(Box Plot):用于展示数据的分布情况和异常值。 7. 热力图(Heatmap):用于展示数据的相关性和趋势,可以用不同颜色的方块表示不同的数值。 8. 3D图(3D Plot):用于展示三维数据的分布情况和趋势。 以上是Matplotlib常用图形,可以根据不同的需求选择合适的图形进行数据可视化。 ### 回答2: Matplotlib是一个Python数据可视化库,它提供了非常丰富的数据可视化功能。Matplotlib提供了一个包含各种绘图类的模块matplotlib.pyplot,它是一个有状态的可视化系统,具有面向对象的绘图接口Matplotlib接口主要包含以下几个部分: 1.图形容器:Figure和Axes Figure是整个绘图区域的容器,用来管理和存储绘制出来的所有图形元素,每个Figure对象可以包含多个Axes对象,每个Axes对象都是一张图表。 2.图形组件:坐标轴、标题、文本、标签等 Matplotlib提供了丰富的图形组件,包括坐标轴、标题、文本、标签等,可以通过修改这些组件的属性来实现各种样式的图形。 3.绘图方法:bar、scatter、hist等 Matplotlib提供了丰富的绘图方法,包括条形图、散点图、直方图等,可以用来展示数据的不同方面或特点。 常用图形类型包括: 1.条形图 条形图是目前最流行的一种可视化方式,它可以显示多组数据之间的比较关系,可以提供直观的数据分析方法。条形图通常用于显示分类数据。 2.散点图 散点图可以很好地展示关于两个变量之间的关系和它们是否有相关性。散点图可以将两个变量绘制到平面坐标系上,展示变量之间的关联程度。 3.折线图 折线图可以展示数据的趋势和变化,通常用于显示时间序列数据。它是一种连续数据可视化的方法,将数据点连接起来,形成一个平滑的曲线。 4.直方图 直方图可以很好地展示数据的分布情况,通常将数据按照范围划分为若干等分片段,统计每个片段内的数据数量,并绘制成柱状图。 总之,Matplotlib提供了非常丰富的数据可视化功能,可以满足各种各样的数据可视化需求,以展示数据的不同侧面和特性。 ### 回答3: Matplotlib是Python科学计算中最常用的绘图库之一,因为它提供了广泛的绘图能力,包括二维和三维图形,直方图、散点图、等高线图、误差条图和3D图形等等。同时,Matplotlib非常灵活,用户可以根据自己的需要定制图形Matplotlib接口主要包括pyplot模块和OO模块。pyplot模块提供了和Matlab类似的绘图接口,它是Matplotlib中最常用的模块,因为它提供了一系列的命令式函数,能够快速地对数据进行可视化。而OO模块则更加面向对象,用户可以通过创建Figure、Axes和Axis对象来控制每个元素的细节。 在Matplotlib中,最常用图形包括: 1.线性图:线性图最常见的用途是用来展示趋势和关系。在Matplotlib中,可以使用plot()函数绘制线性图,可以设置线条的类型、颜色和标签等。 2.散点图:散点图用于展示两个变量之间的关系,通常用来发现数据中的异常值或者找出数据之间的相关性。Matplotlib中可以使用scatter()函数绘制散点图,可以设置散点的大小、颜色和形状等。 3.条形图:条形图用于比较不同类别的数据之间的差异,通常使用垂直或水平的条形来表示不同类别的数据。在Matplotlib中,可以使用bar()函数绘制条形图,可以设置条形的宽度、颜色和标签等。 4.饼图:饼图用于展示不同类别的数据之间的比例关系,通常使用饼形来表示不同数据之间的比例。在Matplotlib中,可以使用pie()函数绘制饼图,可以设置饼图的颜色、标签和半径等。 5.箱线图:箱线图用于展示数据的分布情况,通常使用盒子来表示数据的上下四分位数,使用线来表示数据的中位数和极值。在Matplotlib中,可以使用boxplot()函数绘制箱线图,可以设置盒子的宽度、颜色和标签等。 除了上述图形Matplotlib还提供了许多其他的图形类型,用户可以根据自己的需要选择适合的图形类型来展示数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

juanqingcai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值