1、介绍

  把每个图都看作一个对象,图中的每一个部分也是对象。——所有的一切都是对象。

  工具——ipython notebook

  是python里边用的最多的2D&3D的会图库,开源免费库,使用方法和matlab类似

  是一个网页版的ipython,可以利用网页的特性展现一些副文本。

  网络版的:https://try.jupyter.org/

  打开之后如下图所示:

  点击右上角new,然后选择python2

  输入程序即可。

  用它就可以不用安装各种库啊啥的,只要有一个浏览器就可以了。还可以写笔记。还可以放在github上。

  作者例子:http://github.com/heibanke/math/blob/master/matplotlib_0ipynb

  本地安装的话:pip install ipython[notebook]

  

  安装完之后敲:ipython notebook之后就自动启动了,然后自动打开浏览器

  

  如果觉着安装各种库比较费劲的话,可以安装集成开发环境:Anaconda

2、画简单图

  如何打开ipynb的文件呢?

    选择打开方式——在问价夹下C:\Portable Python 2.7.6.1\App\Scriptsjupyter-notebook.exe——选择jupyter-notebook.exe打开

  打开之后是浏览器的形式

  

  %matplotlib inline是用来确定matplotlib的输出方式,这样的话,就不用再新弹出一个窗口来输出图像,而是直接输出到网页里。

  2.1画简单图

    运行时shift+回车键

from matplotlib import pyplot as plt

x = [1,2,3,1]
y = [1,3,0,1] plt.plot(x,y) #plt.title('Triangle')
#plt.ylabel('Y axis')
#plt.xlabel('X axis') #plt.xticks([1,6])
#plt.yticks([1,6])
#plt.xticks([1,6],['a','b']) #plt.ylim([-1,4])
#plt.xlim([-1,4]) plt.grid(True,color='r') plt.show()

  2.2画图的样式

    数据线的样式设置

      颜色缩写    全称
      b blue
      c cyan
      g gree
      k black
      m magenta
      r red
      w white
      y yellow       线型缩写 含义
      -- --虚线
      -. -.虚线
      : .虚线
      - 实线       marker类型参考
      http://www.labri.fr/perso/nrougier/teaching/matplotlib/#line-properties
from matplotlib import pyplot as plt
import numpy as np x = [1,2,3,1]
y = [1,3,0,1] # np.array将列表转换成numpy的数组后可以支持广播broadcast运算
plt.plot(x,y,color='r',linewidth='',linestyle='--',marker='D', label='one')
plt.plot(np.array(x)+1,np.array(y)+1,color='g',linewidth='',linestyle=':',marker='o', label='two')
plt.plot(np.array(x)+2,np.array(y)+3,color='k',linewidth='',linestyle='-.',marker='>', label='three') plt.grid(True)
plt.legend()
#plt.legend(loc='upper left') plt.show()

  2.3中文

    1. 下载参考资料里的微软雅黑字体msyh.ttf
    2. 将字体拷贝到matplotlib安装位置 /matplotlib/mpl-data/fonts/
    3. 修改配置文件 /matplotlib/mpl-data/matplotlibrc

      1) backend : TkAgg #mac需要修改,windows默认就是TkAgg

      2) font.family : Microsoft YaHei

      3) font.serif : Microsoft YaHei, ......#(后面的不变,只在前面加雅黑字体)

      OK, 大功告成,试试效果吧

 
# -*- coding: utf-8 -*-
from matplotlib import pyplot as plt
import numpy as np x = [1,2,3,1]
y = [1,3,0,1] x2 = np.array(x)+1
y2 = np.array(y)+1 plt.plot(x,y,'g',label=u'第一个', linewidth=5)
plt.plot(x2,y2,'c',label=u'第二个',linewidth=5) plt.title(u'两个三角形')
plt.ylabel(u'Y轴')
plt.xlabel(u'X轴') plt.legend() plt.show()

  2.4公式

import matplotlib.pyplot as plt
fig = plt.figure() #figsize=(10,6)
ax= fig.add_subplot(111)
ax.set_xlim([1, 6]);
ax.set_ylim([1, 9]);
ax.text(2, 8, r"$ \mu \alpha \tau \pi \lambda \omega \tau \
lambda \iota \beta $",color='r',fontsize=20);
ax.text(2, 6, r"$ \lim_{x \rightarrow 0} \frac{1}{x} $",fontsize=20);
ax.text(2, 4, r"$ a \ \leq \ b \ \leq \ c \ \Rightarrow \ a \
\leq \ c$",fontsize=20);
ax.text(2, 2, r"$ \sum_{i=1}^{\infty}\ x_i^2$",fontsize=20);
ax.text(4, 8, r"$ \sin(0) = \cos(\frac{\pi}{2})$",fontsize=20);
ax.text(4, 6, r"$ \sqrt[3]{x} = \sqrt{y}$",fontsize=20);
ax.text(4, 4, r"$ \neg (a \wedge b) \Leftrightarrow \neg a \
\vee \neg b$");
ax.text(4, 2, r"$ \int_a^b f(x)dx$",fontsize=20);
plt.show()

    

  

    Annotate各种格式可参考文档

    http://matplotlib.org/users/annotations_guide.html#annotating-with-arrow

import matplotlib.pyplot as plt

plt.figure(1, figsize=(3,3))
ax = plt.subplot(111) ann = ax.annotate("Test",
xy=(0.2, 0.2),
xytext=(0.8, 0.8),
size=20, va="center", ha="center",
bbox=dict(boxstyle="round4", fc="w"),
arrowprops=dict(arrowstyle="-|>",
connectionstyle="arc3,rad=0.2",
fc="r"),
)
ax.grid(True)
plt.show()

    

    具体设计成什么样子需要查一下官方文档

  2.5多子图结构

  

from matplotlib import pyplot as plt
import numpy as np # arange类似python里的range
t = np.arange(0, 5, 0.2) fig = plt.figure()#figsize=(10,6) #行, 列, 序号
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(212) ax1.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
ax1.grid(True)
ax1.set_title('plot') ax2.semilogy(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
ax2.grid(True)
ax2.set_title('ylog') ax3.loglog(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
ax3.grid(True)
ax3.set_title('loglog') fig.suptitle('normal vs ylog vs loglog')
#fig.subplots_adjust(hspace=0.4) plt.show()

    

3深度图

  

  图是用来更好的解释数据

  目标:让老板或客户印象深刻,一目了然

    1. 饼状图
    2. 柱状图
    3. 散点图
    4. 概率图
    5. 组合图
    6. 三维数据图
    7. 美化
  3.1饼状图
import matplotlib.pyplot as plt

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

# The slices will be ordered and plotted counter-clockwise.
labels = [u'直接访问', u'外部链接', u'搜索引擎']
sizes = [160, 130, 110]
colors = ['yellowgreen', 'gold', 'lightskyblue'] #explode 爆炸出来
explode = (0.05, 0.0, 0.0) patches, l_texts, p_texts = plt.pie(sizes, explode=explode, labels=labels, colors=colors, labeldistance=0.8,
autopct='%3.1f%%', shadow=True, startangle=90, pctdistance=0.6) # 设置x,y轴刻度一致,这样饼图才能是圆的
#plt.axis('equal')
#plt.legend() """
for t in l_texts:
t.set_size(20) for t in p_texts:
t.set_size(20)
"""
plt.show()

    


  3.2柱状图   
import numpy as np
from matplotlib import pyplot as plt plt.figure(figsize=(9,6)) n = 12
X = np.arange(n)+1
# numpy.random.uniform(low=0.0, high=1.0, size=None), normal
Y1 = (1-X/float(n+1)) * np.random.uniform(0.5,1.0,n)
Y2 = (1-X/float(n+1)) * np.random.uniform(0.5,1.0,n) # bar and barh
width = 0.5
plt.bar(X, Y1, width=width, facecolor='#9999ff', edgecolor='white')
#plt.bar(X, -Y2, width=width, facecolor='#ff9999', edgecolor='white') """
for x,y in zip(X,Y1):
plt.text(x+0.4, y+0.05, '%.2f' % y, ha='center', va= 'bottom') for x,y in zip(X,-Y2):
plt.text(x+0.4, y-0.15, '%.2f' % y, ha='center', va= 'bottom')
""" #plt.ylim(-1.25,+1.25)
plt.show()
  

  3.3散点图

  

from matplotlib import pyplot as plt
import numpy as np plt.figure(figsize=(9,6)) n = 1024 # rand 和 randn
X = np.random.randn(1,n)
Y = np.random.randn(1,n) T = np.arctan2(Y,X) plt.scatter(X,Y, s=75, c=T, alpha=.4, marker='o') #plt.xlim(-1.5,1.5), plt.xticks([])
#plt.ylim(-1.5,1.5), plt.yticks([]) plt.show()

    

  3.4概率分布

from matplotlib import pyplot as plt
import numpy as np mu = 0
sigma = 1
x = mu + sigma*np.random.randn(10000) fig,(ax0,ax1)=plt.subplots(ncols=2, figsize=(9,6)) ax0.hist(x, 20, normed=1, histtype='bar', facecolor='g', alpha=0.75)
ax0.set_title('pdf') ax1.hist(x, 20, normed=1, histtype='bar', rwidth=0.8, cumulative=True)
ax1.set_title('cdf') plt.show()

  

  3.5组合图

# ref : http://matplotlib.org/examples/pylab_examples/scatter_hist.html

import numpy as np
import matplotlib.pyplot as plt # the random data
x = np.random.randn(1000)
y = np.random.randn(1000) # 定义子图区域
left, width = 0.1, 0.65
bottom, height = 0.1, 0.65
bottom_h = left_h = left + width + 0.02 rect_scatter = [left, bottom, width, height]
rect_histx = [left, bottom_h, width, 0.2]
rect_histy = [left_h, bottom, 0.2, height] plt.figure(1, figsize=(6, 6)) # 根据子图区域来生成子图
axScatter = plt.axes(rect_scatter)
axHistx = plt.axes(rect_histx)
axHisty = plt.axes(rect_histy) # no labels
#axHistx.xaxis.set_ticks([])
#axHisty.yaxis.set_ticks([]) # now determine nice limits by hand:
N_bins=20
xymax = np.max([np.max(np.fabs(x)), np.max(np.fabs(y))])
binwidth = xymax/N_bins
lim = (int(xymax/binwidth) + 1) * binwidth
nlim = -lim # 画散点图,概率分布图
axScatter.scatter(x, y)
axScatter.set_xlim((nlim, lim))
axScatter.set_ylim((nlim, lim)) bins = np.arange(nlim, lim + binwidth, binwidth)
axHistx.hist(x, bins=bins)
axHisty.hist(y, bins=bins, orientation='horizontal') # 共享刻度
axHistx.set_xlim(axScatter.get_xlim())
axHisty.set_ylim(axScatter.get_ylim()) plt.show()

  

# ref http://matplotlib.org/examples/showcase/integral_demo.html
import numpy as np
import matplotlib.pyplot as plt def func(x):
return (x - 3) * (x - 5) * (x - 7) + 85 a, b = 2, 9 # integral limits
x = np.linspace(0, 10)
y = func(x) # 画线
fig, ax = plt.subplots()
plt.plot(x, y, 'r', linewidth=2)
plt.ylim(ymin=0) # 画阴影区域
xf = x[np.where((x>a)&(x<b))]
plt.fill_between(xf, np.zeros(len(xf)), func(xf), color='blue', alpha=.25) # 画文本
plt.text(0.5 * (a + b), 30, r"$\int_a^b f(x)\mathrm{d}x$",
horizontalalignment='center', fontsize=20) plt.show()

  

  3.6三维数据图

import numpy as np
import matplotlib.pyplot as plt fig = plt.figure(figsize=(9,6),facecolor='white') # Number of ring
n = 50
size_min = 50
size_max = 50*50 # Ring position
P = np.random.rand(n,2) # Ring colors R,G,B,A
C = np.ones((n,4)) * (0,0,0,1)
# Alpha color channel goes from 0 (transparent) to 1 (opaque)
C[:,3] = np.linspace(0,1,n) # Ring sizes
S = np.linspace(size_min, size_max, n) # Scatter plot
plt.scatter(P[:,0], P[:,1], s=S, lw = 0.5,
edgecolors = C, facecolors='None') plt.xlim(0,1), plt.xticks([])
plt.ylim(0,1), plt.yticks([]) plt.show()

    

from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt fig = plt.figure(figsize=(9,6))
ax = fig.add_subplot(111,projection='3d') z = np.linspace(0, 6, 1000)
r = 1
x = r * np.sin(np.pi*2*z)
y = r * np.cos(np.pi*2*z) ax.plot(x, y, z, label=u'螺旋线', c='r')
ax.legend() # dpi每英寸长度的点数
plt.savefig('3d_fig.png',dpi=200)
plt.show()

  

  3d画图种类很多,可参考:http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html

  其他种类图可参考:http://matplotlib.org/gallery.html

python画图—黑板客老师课程学习的更多相关文章

  1. python爬虫——黑板客老师课程学习

    程序: 目标url 内容提取 表现形式 为什么: 大数据——数据膨胀,信息太多了,不知道哪些信息适合你,例如谷歌搜索引擎. 垂直行业搜索——某一个行业的搜索,与搜索引擎最大的区别:搜索引擎是告诉你哪些 ...

  2. python类——黑板客老师课程学习

    1.基本语法 class class_name(base_class):  base_class是它继承的父类 class_var def methods(self,args): statements ...

  3. python变量——黑板客老师课程学习

    1.和C++.Java的区别: 动态类型:不需要声明a的类型. a=34 type(a) <type  ‘int’> 一切皆对象: 4 2.数字: 自动转换类型:a=34  A=3.14 ...

  4. python计算机视觉——黑板客老师课程学习

    机器学习的一个应用方向,是如何让机器去理解图像.包括对图像里物体的识别,跟踪和测量. 能做什么——无人驾驶汽车.人脸识别.车牌识别手势识别(游戏方向) PIL静态的库 OpenCV 动态的库 impo ...

  5. 线性代数和numpy——黑板客老师课程学习

    一.代数是什么 代数->数的抽象表示->向量空间(线性空间) 线代->线性代数 关系: 向量空间之间和内部转换是通过线性变换. 实数——一维空间的点 复数——二维空间的点 如果两个向 ...

  6. python语句表达式——黑板客老师课程学习

    1.赋值 多重赋值: a,b=1,2 a,b=’beijing’,’sh’ a,b=’bj’ a,b=(1,2) a,b=[1,2] …… 2.输入输出 输入: raw_input()   原始输入 ...

  7. pyhton函数——黑板客老师课程学习

    1.基本语法 语法: def func_name (arguments)  定义 statements return x,y x,y=func_name(para)   调用 作用域: 可以给内置的函 ...

  8. "做中学"之“极客时间”课程学习指导

    目录 "做中学"之"极客时间"课程学习指导 所有课程都可以选的课程 Java程序设计 移动平台开发 网络攻防实践 信息安全系统设计基础 信息安全专业导论 极客时 ...

  9. Python全栈day24(面向对象编程作业作业_定义学校老师课程班级学生类)

    面向对象作业 作业_定义学校老师课程班级学生类.py #面向对象编程作业,定义学校老师课程班级学生类 #定义几个类,尽可能定义多的数据属性及函数属性 class School: def __init_ ...

随机推荐

  1. Redis 连接问题

    .NET 中使用 StackExchange.Redis 我为什么想写这个,总感觉很多介绍相应技术的博客,只是把内容从官网搬到自己的博客中,没有任何的实践,这样会给想学的人,没有任何好处,也可能我是自 ...

  2. EventBus--出现的问题

    --- 1 , EventBus收不到消息问题. 项目中遇到的问题,做搜索商品的时候遇到, 1.情况是一个FragmentActivity包含四个碎片Fragment,在FragmentActivit ...

  3. Entity Framework 学习笔记

    1.自定义数据库链接字符串上下文 public class PetDbContext : DbContext { public PetDbContext() : base("name=Dem ...

  4. 【HOW】如何限制Reporting Services报表导出功能中格式选项

    Reporting Services报表导出功能中缺省会提供多种导出格式选项,但很多情况下不需要全部的格式选项,因此需要对这些选项进行限制.下面我们以SQL Server 2008 R2为例来说明对这 ...

  5. 【原创】Linux常用管理命令总结

    一.文件夹操作:1.查看文件夹ls [-al]/dir Diredtory_Name2.建立文件夹mkdir [-p] Diredtory_Name3.删除文件夹rm -r[f] Diredtory_ ...

  6. 部署web应用

    package it.cast.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servle ...

  7. 开发android App干坏事(二)-wifi控制

    本来今天打算换个话题的,鉴于昨天android篇反响还不错,最近也是在做这方面的东西,今天聊聊一个新的android的发现-wifi的控制(好吧,其实也不能说是坏事,只是觉得wifi安全还是要引起警示 ...

  8. ACM知识点

    基础算法 高精 模拟 分治 贪心 排序 DFS 迭代加深搜索 BFS 双向BFS 动态规划 DAG上DP 树上DP 线性DP 图算法 最短路 FLYD DJATL BF 最大流 Dinic ISAP ...

  9. python脚本基础总结

    1. 注释 ①单行注释:#单行注释 ②多行注释: ''' 三个单引号,多行注释符 ''' ③中文注释:#coding=utf-8 或者 #coding=gbk 2.输入输出 ① 输入:  3.0后的p ...

  10. 把解压缩版的tomcat6注册成服务并设置自启动

    操作步骤: 1.在“开始 ”→“运行 ”中输入cmd 命令,进入MS-DOS界面 2.cd 到tomcat的bin目录下       C:/> cd tomcat/bin 3.运行命令servi ...