python_matplotlib_pyplot

  • matplotlib 面向对象的调用接口进行绘图比较烦琐,因此matplotlib还提供了快速绘图的pyplot模块,方便我们快速绘制 二维图表。
  • 为了将matplotlib绘制的图表嵌入Notebook中,需要执行下面的命令:
%matplotlib inline
  • 使用inline模式在Notebook中绘制的图表会自动关闭,为了在Notebook的多个单元格内操作同一幅图表,需要运行下面命令:
%config InlineBackend.close_figures = False

1. pyplot绘图实例如下:

  import matplotlib.pyplot as plt

  x = np.linspace(0, 10, 1000) 
  y = np.sin(x) 
  z = np.cos(x**2)

  plt.figure(figsize=(8,4)) 
      #调用figure()创連一个Figure对象,成为当前Figure对象,如果不调用,则在plot()时自动生成figure对象。
      #figsize参数指定Figure对象的宽度和高度,单位为英寸。
      #dpi参数指定Figurc对象的分辨率,即每英寸所表示的像素数,这里使用默认值80。

  plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
  plt.plot(x,z, "b--",label="$cos(x^2)$"
      #plot()在当前的Axes(子图)对象上绘图,如果当前的Figure对象中没有Axes对象,将会为之创建一个几乎充满整个图表的Axes对象,作为当前的axes对象。
      #label:给曲线指定一个标签,此标签将在图示中可见。如果标签字符用$包裹,则可显示为数学公式。
      #color:指定曲线的颜色,颜色可以用"red","#000000",(1.0,0.0,0.0)三种方式表示。
      #linewidth: 指定曲线的宽度,可以不是整数,也可以使缩写形式的参数名lw。
      #可以使用简写表示颜色和线型,"b--",其中’b’表示蓝色,--表示线型为虚线。

  # 下面是Axes对象的各个属性设置:

  plt.xlabel("Time(s)") 
  pit.ylabel("MVolt") 
      # xlabel、ylabel 分别设置X 、Y 轴的标题文字。

  plt.title("PyPlot First Example") 
      # title: 子图的标题。

  plt.ylim(-1.2,1.2) 
      # xlim、ylim: 分别设 X 、Y 轴的显示范園。

  pit.legend()
      # legend:显示图例,即图中表示每条曲线的标签(label)和样式的矩形域。

  plt.savefig()
      # plt.show() 展示图
      # plt.savefig()将当前的Figure对象保存成图像文件,图像格式由图像文件的扩展名决定。

  # -------------------------------------------
 # savefig()的第一个参数可以是文件名,也可以是接口对象。如下:此时需要使用fmt参数指定图像格式。

  import io
  buf = io.BytesIO()          # 创逑一个用来保存图像内容的BytesIO对象 
  plt.savefig(buf, fmt="png") # 将图像以png格式保存到 buf 中

2. 面向对象进行绘图。

  • matplotlib 真正优秀的地方就是面向对象,包括pyplot模块在进行封装的时候也是在内部获取到当前的fig 和 axes 对象后进行的绘图。具体是通过 gcf()获得Figure对象,gca()获得子图的Axes对象。
fig = plt.gcf() 
axes = plt.gca() 

3. 配置属性

3.1 matplotlib所绘制图表的每个组成部分都和一个对象对应,可以通过调用这些对象的属性设 置方法set_*()或者 pyplot模块的属性设置函数setp()来设置它们的属性值。

方式1:set_*()

plt.figure(figsize=(4j 3)) 
x = np.arange(0^ 5., 0.1)
line = plt.plot(x, 0.05*x*x)[0] # plot 返回一个列表 
line.set_alpha(0.5) # 调用 Line2D 对象的set_*()方法来设置厲性值

方式2 : plt.setp()

lines = plt.plot(x,np.sin(x),x, np.cos(x))
pit.setp(lines,color="r",linewidth=4.0)
3.2 通过调用Line2D对象的get_*() 或者通过plt.getp()来获取对象的属性值:
print line.get_linewidth()
print plt.getp(lines[0], "color")    # 返回color属性
  • 注意getp()和 setp()不同,它只能对一个对象进行操作: 如果指定属性名称,返冋对象的某个值。 不指定属性名:输出对象的所有属性和值。
f = plt.gcf()
plt.getp(f)
  • Figure对象的axes属性是一个列表,它保存图表中的所有子图对象。相同的方式可以获取axes对象的lines属性等。
plt.getp(f,"axes")
plt.getp(f, "axes")[0] is plt.gca()
alllines = plt.getp(plt.gca(), "lines")

4. 绘制多子图

  • 一个Figure对象可以包含多个子图(Axes) ,可以使用subplot()快速绘 制包含多个子图的图表,它的调用形式如下:
subplot(numRows, numCols, plotNum)
  • 图表的整个绘图区域被等分为numRows行 和 numCols列,然后按照从左到右、从上到下的顺序对每个区域进行编号,左上区域的编号为1。
  • 三个参数都小于10,则可以把它们缩写成 个整数,例如 subplot(323)和 subplot(3,2,3)的含义相同。
pit.subplot(221 ) # 第一行的左图 
plt.subplot(222) # 第一行的右图 
pit.subplot(212) # 第二整行
  • 同时绘制多张图。
plt.figure(l)              # 创建图表 1
plt.figure(2)              # 创建图表 2
axl = plt.subplot(121)     # 在图表2 中创建子图1
ax2 = plt.subplot(122)     # 在图表 2 中创建了图 2
x = np.linspace(0,3,100)
for i in xrange(5):
    plt.figure(l)          # 选择图表 1 
    pit.plot(x, np.exp(i*x/3)) 
    plt.sca(axl)           # 选择图表2 的子图1 此处也可以ax1.plot()方式进行。
    pit.plot(x, np.sin(i*x)) 
    plt.sca(ax2)           # 选择图表2 的子图2 
    pit.plot(x,np.cos(i*x))
matplotlib_multplot.png
  • 批量定义 axes
fig,axes = plt.subplots(2, 3)
[a, b, c], [dj e, f] = axes 
  • 4.2. 另外一种布局方式:subplot2grid
fig = plt.figure(figsize=(6, 6)) 
axl = plt.subplot2grid((3,3),(0,0),colspan=2)
ax2 = plt .subplot2grid((3,3),(0,2 ),rowspan=2)
ax3 = plt.subplot2grid((3,3), (1,0),rowspan=2)
ax4 = plt.subplot2grid((3,3), (2,1),colspan=2)
ax5 = plt.subplot2grid((3,3), (1,1))
subplot2grid.png

5. 配置文件

  • 关于绘制一幅图中颜色、字体、线型等属性,matplotlib将这些默认配置保存在matplotlibrc的配置文件中,通过修改配置文件,可以修改图表的默认样式。同时存在多个配置文件时,遵从优先原则。
  • 获取配置文件路径
from os import path
path .abspath(matplotlib.get_configdir()) 
#-------------------
path.abspath(matplotlib.matplotlib_fname())
  • matplotlib 模块载入时,rc_params()函数读入了配置文件,保存在rcParams变量中。
print(matplotlib.rcParams) 
#---------
agg.path.chunksize : 0 
animation.avconv_args: [ ] 
animation.avconv_path: avconv 
animation.bitrate: -1
  • 可以通过rcParams变量进行属性设置。缩写为 rc()
matplotlib .rcParams["lines.marker"] = "o"
matplotlib.rc("lines", marker="x", linewidth=2, color="red")
matplotlib .rcdefaults()  # 恢复道默认设定。
  • 可以调节样式,或者说风格。
from matplotlib import style 
print style.available                    # 可选样式
style.use("ggplot")                      # 选择ggplot样式。

6. 显示中文。

6.1 获取支持的字体文件
from matplotlib.font_manager import fontManager 
fontManagen.ttflist[:3]
[<Font 'cmssl0' (cmssl0.ttf) normal normal 400 normal>,
<Font 'cmbl0' (cmbl0.ttf) normal normal 400 normal>,
<Font 'cmexl0' (cmexl0.ttf) normal normal 400 normal>]
# -------------------
print fontManager.ttflist[0].name 
print fontManager.ttflist[0].fname
6.2 设置字体
  1. 程序中直接指定
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc'、 size=14)
plt.xlabel(u"时间",fontproperties=font) 
  1. 在程序开头修改配置字典rcParams。
pit.rcParams["font.family"] = "SimHei" 
pit.plot([1,2,3]) 
plt.xlabel(0.5 ,0.5, u "中文字体")
  1. 改配置文件。 (不建议)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容