先看下Matplotlib实现的效果

是不是出现了也想敲一个的心动,那让我们一起来了解Matplotlib吧

Matplotlib安装##

1.Windows系统安装Matplotlib

进入到cmd的命令界面,输入以下命令:

python -m pip install -U pip setuptools

python -m pip install matplotlibm

2.Linux系统安装Matplotlib

  • Ubuntu: sudo apt-get install python-matplotlib
  • Redhat: sudo yum install python-matplotlib

Mac OSX 系统安装 Matplotlib

可以使用 pip 命令来安装:sudo python -mpip install matplotlib

图文显示##

首先我们需要下载中文包:ShiHei字体包 将下载的字体包放置到项目目录中

import matplotlib
import numpy as np
from matplotlib import pyplot as plt zhfont1 = matplotlib.font_manager.FontProperties(fname="SimHei.ttf")
x=np.array([1,2,3,4,5,6,7,8])
y = 2 * x + 5
plt.title("我的 - 测试", fontproperties=zhfont1) fontproperties 设置中文显示,fontsize 设置字体大小
plt.xlabel("x 轴", fontproperties=zhfont1)
plt.ylabel("y 轴", fontproperties=zhfont1)
plt.plot(x, y,"-b")
plt.show()

执行结果:

从执行结果来看不难分析出pil.xlable实现的是定义x轴的默认显示,ylabel定义的是y轴的显示 ,plot(x,y,'-b')中定义的是x y轴的数据以及显示的颜色和样式信息。

其中具体的样式和颜色信息的设置参数如下

字符 plot函数中字符描述
'-' 实线样式
'--' 短横线样式
'-.' 点划线样式
':' 虚线样式
'.' 点标记
',' 像素标记
'o' 圆标记
'v' 倒三角标记
'^' 正三角标记
'<' 左三角标记
'>' 右三角标记
'1' 下箭头标记
'2' 上箭头标记
'3' 左箭头标记
'4' 右箭头标记
's' 正方形标记
'p' 五边形标记
'*' 星形标记
'h' 六边形标记 1
'H' 六边形标记 2
'+' 加号标记
'x' X 标记
'D' 菱形标记
'd' 窄菱形标记
'|' 竖直线标记
'_' 水平线标记
字符 plot函数中颜色描述
'b' 蓝色
'g' 绿色
'r' 红色
'c' 青色
'm' 品红色
'y' 黄色
'k' 黑色
'w' 白色

下面我们可以运用Numpy的相关知识绘制各种图像##

我们的目的重点不是编写各种的图像,而是了解绘图的原理,通过学习能够绘制符合自己需要的图像(学习matplotlib前建议要学习Numpy的知识)

绘制正弦波###

#计算正弦曲线上点的 x 和 y 坐标
x = np.arange(0, 3 * np.pi, 0.1)
y = np.sin(x)
plt.title("sine wave form")
#使用 matplotlib 来绘制点
plt.plot(x, y)
plt.show()

运行结果:

该代码中 x是一个数组,它是借助numpy.arange()方法实现0-(3*圆周率)的范围内每间隔0.1生成一个点

y = np.sin(x)

表示的是运用正弦函数生成与x轴点一 一对应的y轴的点,最后使用matplotlib的plot方法绘制出来相应的图像。

绘制同一窗口中不同的图像###

实现多个图像的绘制就要用的matplotlib的subplot()函数

#subplot参数解释 以下创建的是一个高度为2,宽度为1,的第1个图像
plt.subplot(2, 1, 1)
#将第一个图像绘制出来
plt.plot(x,y_sin)
plt.title('Sin')
#subplot参数解释 以下创建的是一个高度为2,宽度为1,的第2个图像
plt.subplot(2, 1, 2)
#将第二个图像绘制出来
plt.plot(x,y_cos)
plt.title('Cos')
plt.show()

运行结果:

绘制条形图###

绘制条形图需要用到matplotlib的bar()函数生成条形图,使用原理与上面的图像绘制一样,不同的是方法产生的效果

可以通过以下代码来进一步加深图像绘制的印象

# 条形图 bar
x = [5,8,10]
y = [12,16,6]
x2 = [6,9,11]
y2 = [6,15,7]
plt.bar(x, y, align='center')
plt.bar(x2, y2, color='y', align='center')
plt.title('条形图', fontproperties=zhfont1)
plt.ylabel('Y 轴', fontproperties=zhfont1)
plt.xlabel('X 轴', fontproperties=zhfont1)
plt.show()

运行结果:

绘制直方图###

hist()函数可以将将数据和bin参数作为参数,并且能够转化为直方图

# 直方图 plt()
a = np.array([21,99,1,46,88,77,15,24,11,61,66,67,68,30,41,55,18,31,90,26])
plt.hist(a, color='g', bins=[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
plt.title("histogram")
plt.show()

运行结果:

扩展##

关于matplotlib绘图的常用配置说明

# 导入 matplotlib 的所有内容(nympy 可以用 np 这个名字来使用)
from pylab import * # 创建一个 8 * 6 点(point)的图,并设置分辨率为 80
figure(figsize=(8,6), dpi=80) # 创建一个新的 1 * 1 的子图,接下来的图样绘制在其中的第 1 块(也是唯一的一块)
subplot(1,1,1) X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X) # 绘制余弦曲线,使用蓝色的、连续的、宽度为 1 (像素)的线条
plot(X, C, color="blue", linewidth=1.0, linestyle="-") # 绘制正弦曲线,使用绿色的、连续的、宽度为 1 (像素)的线条
plot(X, S, color="green", linewidth=1.0, linestyle="-") # 设置横轴的上下限
xlim(-4.0,4.0) /plt.xlim(X.min()*1.1, X.max()*1.1) # 设置横轴记号
xticks(np.linspace(-4,4,9,endpoint=True)) # 设置纵轴的上下限
ylim(-1.0,1.0) # 设置纵轴记号
yticks(np.linspace(-1,1,5,endpoint=True)) #添加图例 可以指定图例的位置
plt.legend(loc='upper left', frameon=False) # 以分辨率 72 来保存图片
# savefig("exercice_2.png",dpi=72) # 在屏幕上显示
show()

下面是一个综合运用的实例

# 绘制正弦波
# 计算正弦曲线上点的 x 和 y 坐标
x = np.linspace(-np.pi, np.pi, 256,endpoint=True)
y = np.sin(x)
C,S = np.cos(x), np.sin(x)
plt.title("sine wave form")
# 使用 matplotlib 来绘制点
plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plt.plot(x, S, color="red", linewidth=2.5, linestyle="-", label="sine")
#以下是对边界的设置
plt.xlim(x.min()*1.1, x.max()*1.1)
#以下是对x轴的记号设置
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$'])
#以下是对y轴的记号设置
plt.ylim(C.min()*1.1,C.max()*1.1)
plt.yticks([-1, +1],
[r'$-1$', r'$+1$'])
#以下是对label图例位置进行设置
plt.legend(loc='upper left', frameon=False)
plt.show()

运行结果:

下面一个是使用matplotlib中的pie()函数实现的饼状图的实例:

n = 20
Z = np.random.uniform(0,1,n)
plt.pie(Z)
plt.show()

运行结果:

也可以用来实现一些3D的图像效果,下面是一个实现的实例:

from pylab import *
from mpl_toolkits.mplot3d import Axes3D fig = figure()
ax = Axes3D(fig)
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='hot')
plt.savefig('sample.png', bbox_inches="tight")
show()

运行结果:

是不是

Matplotlib从兴趣到实践的更多相关文章

  1. 最适合作为Java基础面试题之Singleton模式

    看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...

  2. Django如何设置proxy

    设置porxy的原因 一般情况下我们代理设置是针对与浏览器而言,通常只需在浏览器设置中进行配置,但它只针对浏览器有效,对我们自己编写的程序并任何效果,这时就需要我们在软件编码中加入代理设置. --- ...

  3. 基于Jenkins自动构建系统开发

    1  绪论 1.1 课题的研究背景 随着IT行业的不断发展,软件开发的复杂度也随着不断提高.与此同时,软件的开发团队也越来越庞大,而如何更好地协同整个团队进行高效准确的工作,从而确保软件开发的质量已经 ...

  4. Xamarin.Forms移动开发系列5 :XAML标记扩展

    摘要 本文主要讲述Xamarin.Forms中XAML的标记扩展. 前言 在Xamarin.Forms移动开发系列4 :XAML基础一文中提到过XAML标记扩展,本文将对标记扩展进行更深入的了解. 大 ...

  5. 2020中国.NET开发者峰会近50场热点技术专题揭秘

    简介 / Summary 2014年微软组织并成立.NET基金会,微软在成为主要的开源参与者的道路上又前进了一步.2014年以来已经有众多知名公司加入.NET基金会,微软,Google,AWS三大云厂 ...

  6. 向大学说拜拜——大学 > 兴趣 + 时间 + 思考 + 实践

    [人物素描] 大学期间,担任过班委,加入过学生会,参加过社团,拿过奖学金......而印象最深刻的莫过于参加并组织过ACM集训,以及参加过导师的国家自然科学基金项目了.毕业时顺利拿到一波offer,并 ...

  7. matplotlib绘图股票走势图实践

    导入模块 import pandas as pdimport numpy as npfrom pandas import Series,DataFrameimport matplotlib.pyplo ...

  8. Python编程:从入门到实践 - matplotlib篇 - Random Flow

    随机漫游 # random_flow.py 随机漫游 import random class RandomFlow(): """一个生成随机漫游数据的类"&qu ...

  9. Python编程:从入门到实践 - matplotlib篇 - Random Walk

    随机漫步 # random_walk.py 随机漫步 from random import choice class RandomWalk(): """一个生成随机漫步数 ...

随机推荐

  1. P1050 全排列

    题目描述 给定一个正整数n, 按照递增顺序打印数字1到n的所有排列. 输入格式 一个整数n(1<=n<=7). 输出格式 按照递增的顺序输出n的所有排列, 详见样例.请注意,每行末尾不能有 ...

  2. P1011 圆柱体的表面积

    题目描述 输入底面半径 \(r\) 和高 \(h\) ,输出圆柱体的表面积,保留 \(3\) 位小数. 输入格式 输入包含两个实数 \(r,h(1 \le r,h \le 1000)\) 且保证输入的 ...

  3. H3C配置BPDU的生成和传递

  4. jQuery 工具类函数-使用$.extend()扩展Object对象

    除使用$.extend扩展工具函数外,还可以扩展原有的Object对象,在扩展对象时,两个对象将进行合并,当存在相同属性名时,后者将覆盖前者,调用格式为: $. extend (obj1,obj2,… ...

  5. jQuery 工具类函数-检测对象是否为原始对象

    调用名为$.isPlainObject的工具函数,能检测对象是否为通过{}或new Object()关键字创建的原始对象,如果是,返回true,否则,返回false值,调用格式为: $.isPlain ...

  6. vue-learning:28 - component - 组件事件的修饰符`.native / .sync`,以及组件属性`model`

    组件事件的修饰符.native / .sync,以及组件属性model .native 原生事件修饰符 在一个组件中,如果我们为其绑定一个原生的点击事件@click,基本是无效的. 在vue中对组件绑 ...

  7. [板子]用线段树解决ST表问题

    ST表可以参考:http://blog.csdn.net/whistlena/article/details/52191463 简单说就是区间RMQ最值问题. 对解决这种问题,线段树不用用啥啊. 扔一 ...

  8. CString::CompareNoCase与CString::Compare的区别

    转载:https://blog.csdn.net/lingdxuyan/article/details/4362116 函数原型:int CompareNoCase( LPCTSTR lpsz ) c ...

  9. 在Linux中执行.sh脚本,异常/bin/sh^M

    在Linux中执行.sh脚本,异常/bin/sh^M 在linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory. 分 ...

  10. Batch Normalization批量归一化

    BN的深度理解:https://www.cnblogs.com/guoyaohua/p/8724433.html BN: BN的意义:在激活函数之前将输入归一化到高斯分布,控制到激活函数的敏感区域,避 ...