Matplotlib从兴趣到实践
先看下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从兴趣到实践的更多相关文章
- 最适合作为Java基础面试题之Singleton模式
看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...
- Django如何设置proxy
设置porxy的原因 一般情况下我们代理设置是针对与浏览器而言,通常只需在浏览器设置中进行配置,但它只针对浏览器有效,对我们自己编写的程序并任何效果,这时就需要我们在软件编码中加入代理设置. --- ...
- 基于Jenkins自动构建系统开发
1 绪论 1.1 课题的研究背景 随着IT行业的不断发展,软件开发的复杂度也随着不断提高.与此同时,软件的开发团队也越来越庞大,而如何更好地协同整个团队进行高效准确的工作,从而确保软件开发的质量已经 ...
- Xamarin.Forms移动开发系列5 :XAML标记扩展
摘要 本文主要讲述Xamarin.Forms中XAML的标记扩展. 前言 在Xamarin.Forms移动开发系列4 :XAML基础一文中提到过XAML标记扩展,本文将对标记扩展进行更深入的了解. 大 ...
- 2020中国.NET开发者峰会近50场热点技术专题揭秘
简介 / Summary 2014年微软组织并成立.NET基金会,微软在成为主要的开源参与者的道路上又前进了一步.2014年以来已经有众多知名公司加入.NET基金会,微软,Google,AWS三大云厂 ...
- 向大学说拜拜——大学 > 兴趣 + 时间 + 思考 + 实践
[人物素描] 大学期间,担任过班委,加入过学生会,参加过社团,拿过奖学金......而印象最深刻的莫过于参加并组织过ACM集训,以及参加过导师的国家自然科学基金项目了.毕业时顺利拿到一波offer,并 ...
- matplotlib绘图股票走势图实践
导入模块 import pandas as pdimport numpy as npfrom pandas import Series,DataFrameimport matplotlib.pyplo ...
- Python编程:从入门到实践 - matplotlib篇 - Random Flow
随机漫游 # random_flow.py 随机漫游 import random class RandomFlow(): """一个生成随机漫游数据的类"&qu ...
- Python编程:从入门到实践 - matplotlib篇 - Random Walk
随机漫步 # random_walk.py 随机漫步 from random import choice class RandomWalk(): """一个生成随机漫步数 ...
随机推荐
- CF1063D Candies for Children
CF1063D Candies for Children 分类讨论题 n<=1e11, 整体上先分n<=2e6与否讨论 len长度,ans贪心的人,p就是len这一段贪心的人 n<= ...
- vue-cli起项目步骤
1.全局安装 vue-cli 老版本:npm install -g vue-cli (npm uninstall vue-cli -g 卸载) 新版本:npm install -g @vue/cli ...
- centos 利用mailx发送邮件
这里就已163或者126邮箱为例!阿里云的25号端口好像发送不了,用465端口可以发送成功! 安装:yum install -y mailx 然后就是修改配置文件 set ssl-verify=ign ...
- github 项目搜索技巧-让你更高效精准地搜索项目
目录 github 搜索技巧 案例 普通搜 搭配技巧搜 限定词 查找某个用户或组织的项目 辅助限定词 还没搞懂的(关于 forks.mirror.issues) 排序(放的是官网的链接) 使用指南 练 ...
- div3的e题有点水呀
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> us ...
- net core天马行空系列:SummerBoot,将SpringBoot的先进理念与C#的简洁优雅合二为一
系列目录 1.net core天马行空系列:原生DI+AOP实现spring boot注解式编程 2.net core天马行空系列: 泛型仓储和声明式事物实现最优雅的crud操作 3.net core ...
- Python基础复习面向对象篇
目录 类与对象的概念 实例方法 实例变量 初始化方法 析构方法 常用内置方法 继承 类方法与静态方法 动态扩展类与实例 @property装饰器 概述 面向对象是当前流行的程序设计方法,其以人类习惯的 ...
- 别再埋头刷LeetCode之:北美算法面试的题目分类,按类型和规律刷题,事半功倍
算法面试过程中,题目类型多,数量大.大家都不可避免的会在LeetCode上进行训练.但问题是,题目杂,而且已经超过1300道题. 全部刷完且掌握,不是一件容易的事情.那我们应该怎么办呢?找规律,总结才 ...
- 来吧,一文彻底搞懂Java中最特殊的存在——null
没事的时候,我并不喜欢逛 P 站,而喜欢逛 programcreek 这些技术型网站,于是那天晚上,在夜深人静的时候,我就发现了一个专注基础但不容忽视的主题.比如说:Java 中的 null 到底是什 ...
- 值得收藏!my.cnf配置文档详解
MySql对于开发人员来说应该都比较熟悉,不管是小白还是老码农应该都能熟练使用.但是要说到的各种参数的配置,我敢说大部分人并不是很熟悉,当我们需要优化mysql,改变某项参数的时候.还是要到处在网上查 ...