绘图与可视化——Matplotlib

Matplotlib 入门知识

matplotlib在Python中应用最多的2D图像的绘图工具包,使用matplotlib能够非常简单的可视化数据。在matplotlib中使用最多的模块就是pyplot。pyplot非常接近Matlab的绘图实现,而且大多数的命令及其类似Matlab.当然,与Matlab类似,需要很多的数学运算,因此numpy这个组件同样是必不可少的。所以很多人说python+matplotlib+numpy就是MATLAB。
首先,在matplotlib建议使用别名,引入包,这样方便以后模块的使用,一般以以下两句开始:

import numpy as np
import matplotlib.pyplot as plt

对plot函数的讲解

上面介绍了简单的绘图,用的基本上都是plot,因此有必要对plot函数进行简单的介绍。官网参考网址:plot使用。熟悉Matlab的人对plot不会陌生,在matplotlib中的使用方式大致和Matlab中是一致的,使用plot,可以对点的标记的样式以及线条的样式进行设置。

函数的声明为:matplotlib.pyplot.plot(*args, **kwargs)。args的参数的长度是不定 的,可以设置很多的属性,kwargs主要是应用于设置线条的属性。对于标注和线条的样式,可以通过简单的字符来表示。
More

一些单词

plot 绘图 axis 轴线 axisymmetric 轴对称的 spines 象限 tick 标记
solid line 实线 dashed line (--)虚线 dash-dot 点画线 dotted line (::)虚线
pixel marker (,)像素标记 triangle down (^)下三角标记 square marker 正方形标记

figure对象画图

接下来调用figure创建一个绘图对象,并且使用它成为当前的绘图对象。
figsize参数指定对象的宽度和高度,单位为英寸;dpi:分辨率,即每个英寸多少像素,缺省值是80,如下创建窗口的宽度为8*80=640像素。

put.figure(figsize=(8,4))

plot函数画图

也可以不创建绘图对象直接用plot函数绘图,matplotlib会自动创建一个绘图对象。

plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
plt.plot(x,z,"b--",label="$cos(X^2)$")

  • label: 给绘制的图一个名字
  • linewidth 曲线宽度
  • b--颜色和线型
其他函数设置属性

plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.title("PyPlot Forsdt Example")
plt.ylim(-1.2,1.2)
plt.legend()

  • x/y label: x/y轴的文字
  • title:图的标题
  • ylim: y轴范围
  • legend: 显示图示

显示出所有绘图对象:

plt.show()

多幅图表

如果需呀同时绘制多幅图表的话,可以传递一个整数参数指定对应图标的序号给figure对象,也可以使用subplot函数绘制有多个轴的图片。

subplot(numRows,numCols,plotNum)
subplot在plotNum指定的区域中创建一个轴对象,如新创建的轴与之前轴重叠的话,之前的会被删除。
创建3行2列6个轴,通过axisbg参数给每个轴设置不同的颜色:
for idx, color in enumerate("rgbyck"):
plt. subplot(320+idx+1.axisbg=color)
plt.show()
sup=bplots_adjust()调节轴间距及边框间距。

保存图像文件

plt.savefig("test.png",dpi=120)
dpi为120输出8*120个像素宽度图片。

多幅图时选定图并绘图

创建2个图1,2,在图2创建上下并排两个子图,用变量分别保存:

plt.figure(1)
plt.figure(2)
ax1 = plt.subplot(211)
ax2 = plt.subplot(212)
在循环中,选定图1为当前图,在上面绘图,然后让图2两个子图为当前图,并绘图:
for i in xrange(5):
plt.figure(1)
plt.plot(x,np.exp(Ix/3))
plt.sca(ax1)
plt.plot(x,np,sin(I
x))
plt.sca(ax2)
plt.plot(x,np,cos(I*x))
plt.show()

坐标轴设定

Axis容器包括坐标轴的刻度线/刻度标签/坐标网格及坐标轴标题等,刻度分主刻度和副刻度。以下绘制线图并得到当前图的X轴对象axis:

plt.plot([1,2,3],[4,5,6])
plt.show()
axis = plt.gca().xaxis
axis.get_ticklocs()#刻度位置列表
axis.get_ticklabels()#标签列表
[x.get_text() for x in axis.get_ticklabels()]#文本字符串
more

对数坐标图
  • semiology()#x轴为对数坐标
  • semiology()#y轴为对数坐标
  • loglog()# 两个轴都为对数坐标
    使用四种坐标图绘制低通滤波器的频率响应曲线,算术和三种对数坐标图:

w = np.linspace(0.1,1000,1000)
p =n np.abs(1/(1+0.1j*w))

plt.subplot(221)
plt.plot(w,p,linewidth=2)
plt.ylim(0,1.5)

plt.subplot(222)
plt.semilogx(w,p,linewidth=2)
plt.ylim(0,1.5)

plt.subplot(223)
plt.semilogy(w,p,linewidth=2)
plt.ylim(0,1.5)

plt.subplot(224)
plt.loglog(w,p,linewidth=2)
plt.ylim(0,1.5)

plt.show()

柱状图

柱状图每根柱子长度表示大小,用来对比多组值。

data = np.loadtxt("xxx.txt")
width = (data[1,0]-data[0,0])*0.4
plt.figure(figsize=(8,5))
//让每根柱子左侧的横坐标为年纪减去柱子的宽度
plt.bar(data[:,0]-width,data[:,1]/1e7, width, color='"b",label=u"男")

plt.bar(data[:,0]-width,data[:,2]/1e7, width, color='"r",label=u"女")
plt.xlim(0width,100)
plt.xlabel(u"年龄")
plt.ylabel(u"人口(千万)")
plt.legend()

plt.show()

散列图
  • 以下方法无法单独指定每个点的颜色和大小:

plt.plot(np.random.random(100), np.random.random(100),"o")
plt.figure(figsize=(8,4))
x = np.random.random(100)
y = np.random.random(100)
plt.scatter(x,y,s=x*1000,c=y,marker=(5,1),alpha=0.8,lw=2, facecolors="none")
plt.xlim(0,1)
plt.ylim(0,1)

plt.show()

scatter()函数前三个参数是数组

  • 前两个是x/y轴坐标
  • s是点的大小
  • c是每个点的颜色,默认的颜色映射表中蓝色对应最小值,红色最大值
  • marker设置点的形状,第一个参数是多边形的边数,第二个是其样式(0:多边形,1:星,2:放射形,3:圆形)
  • alpha设置点的透明度
  • lw 线宽
  • facecolors 参数为none时,表示散列点没有填充颜色
饼图

ply.pie()
explode 将某部分弹出来,数据使用元组,数值的大小是分割出来的与其他两块的间隙
labeldistance 文本的位置离原点有多远,1.1指1.1倍半径的位置
autopct 圆里面的文本格式,%3.1f%%表示小数有三位,整数有一位的浮点数
shadow 饼是否有阴影
startangle 起始角度,0,表示从0开始逆时针转,为第一块。一般选择从90度开始比较好看
pctdistance 百分比的text离圆心的距离

极坐标图
图像
等值线图
三维绘图

酷炫Matplotlib
more

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容