关于matplotlib中一些常见的函数,https://www.cnblogs.com/TensorSense/p/6802280.html这篇文章讲的比较清楚了,https://blog.csdn.net/ouyangjianxiu/article/details/76299171这个也讲的不错

plot函数

plt.plot(x, y, format_string, **kwargs): x为x轴数据,可为列表或数组;y同理;format_string 为控制曲线的格式字符串, **kwargs 第二组或更多的(x, y, format_string)

format_string: 由 颜色字符、风格字符和标记字符组成。

颜色字符:‘b’蓝色  ;‘#008000’RGB某颜色;‘0.8’灰度值字符串

风格字符:‘-’实线;‘--’破折线; ‘-.’点划线; ‘:’虚线 ; ‘’‘’无线条

标记字符:‘.’点标记  ‘o’ 实心圈 ‘v’倒三角  ‘^’上三角

eg: plt.plot(a, a*1.5, ‘go-’,    a, a*2, ‘*’)   第二条无曲线,只有点

plot 显示中文字符

pyplot并不默认支持中文显示,需要rcParams修改字体来实现

rcParams的属性:

‘font.family’ 用于显示字体的名字

‘font.style’ 字体风格,正常’normal’ 或斜体’italic’

‘font.size’ 字体大小,整数字号或者’large’   ‘x-small’

eg:

import matplotlib

matplotlib.rcParams[‘font.family’] = ‘STSong’

matplotlib.rcParams[‘font.size’] = 20

设定绘制区域的全部字体变成 华文仿宋,字体大小为20

中文显示2:只希望在某地方绘制中文字符,不改变别的地方的字体

在有中文输出的地方,增加一个属性: fontproperties

eg:

plt.xlabel(‘横轴:时间’, fontproperties = ‘simHei’, fontsize = 20)

pyplot文本显示函数:

plt.xlabel():对x轴增加文本标签

plt.ylabel():同理

plt.title(): 对图形整体增加文本标签

plt.text(): 在任意位置增加文本

plt. annotate(s, xy = arrow_crd, xytext = text_crd, arrowprops = dict)

: 在图形中增加带箭头的注解。s表示要注解的字符串是什么,xy对应箭头所在的位置,xytext对应文本所在位置,arrowprops定义显示的属性

eg:

plt.xlabel(‘横轴:时间’, fontproperties = ‘SimHei’, fontsize = 15, color = ‘green’)

plt.ylabel(‘纵轴:振幅’, fontproperties = ‘SimHei’, fontsize = 15)

plt.title(r’正弦波实例 $y=cons(2\pi x)$’ , fontproperties = ‘SimHei’, fontsize = 25)

plt.annotate (r’%mu=100$, xy = (2, 1), xytext = (3, 1.5),

arrowprops = dict(facecolor = ‘black’, shrink = 0.1, width = 2)) # width表示箭头宽度

plt.text (2, 1, r’$\mu=100$, fontsize = 15)

plt.grid(True)

plt. annotate(s, xy = arrow_crd, xytext = text_crd, arrowprops = dict)

Plot的图表函数

plt.plot(x,y , fmt)  :绘制坐标图

plt.boxplot(data, notch, position): 绘制箱形图

plt.bar(left, height, width, bottom) : 绘制条形图

plt.barh(width, bottom, left, height) : 绘制横向条形图

plt.polar(theta, r) : 绘制极坐标图

plt.pie(data, explode) : 绘制饼图

plt.scatter(x, y) :绘制散点图

plt.hist(x, bings, normed) : 绘制直方图

example:

# matplolib画正弦函数
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
zhfont1 = fm.FontProperties(fname='C:\Windows\Fonts\simkai.ttf')
x = np.linspace(0,10,100)
plt.plot(x,np.sin(x))
plt.title('正弦函数',fontproperties=zhfont1) # 增加参数fontproperties来限定显示的字体, 用此来解决中文显示
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.show()

# matplotlib画一元n次方程 我们来画一个  f(x)=x^{3}+2x^{2}+3x+4 函数的图形
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
zhfont1 = fm.FontProperties(fname='C:\Windows\Fonts\simkai.ttf')
func = np.poly1d(np.array([1,2,3,4])) # 生成指定的多项式 1,2,3,4是系数 相当于f(x) = 1*x**4 + 2*x**3 + x**3 + 4*x**4
x = np.linspace(-10,10,30)
y = func(x)
plt.plot(x,y)
plt.xlabel('x')
plt.ylabel('y=f(x)')
plt.show()

# matplotlib画多个曲线,我们绘制 f(x)=x^{3}+2x^{2}+3x+4 的同时,再绘制其一阶导函数 f^{'}(x)的图像
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
# zhfont1 = fm.FontProperties(fname='C:\Windows\Fonts\simkai.ttf')
matplotlib.rcParams['font.family'] = 'SimHei' # 用来正常显示中文标签
matplotlib.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.figure(1)
func = np.poly1d(np.array([1,2,3,4]))
func1 = func.deriv(1) # 得到func的一阶导函数
func2 = func.integ() # 得到func的一阶积分函数
x = np.linspace(-10,10,30)
y = func(x)
y1 = func1(x)
y2 = func2(x)
# 在一幅图上画三条曲线
plt.plot(x,y,color='r',label='函数f(x)') # 红色实线
plt.plot(x,y1,'g--',label="函数f'(x)") # 绿色虚线
plt.plot(x,y2,'b-.',label="函数f^2(x)") # 蓝色点划线
plt.legend() # 设置图例和其中的文本的显示
plt.show() # 显示图片

# matplotlib画多个曲线,我们绘制 f(x)=x^{3}+2x^{2}+3x+4 的同时,再绘制其一阶导函数 f^{'}(x)的图像
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
# zhfont1 = fm.FontProperties(fname='C:\Windows\Fonts\simkai.ttf')
matplotlib.rcParams['font.family'] = 'SimHei' # 用来正常显示中文标签
matplotlib.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.figure(1)
func = np.poly1d(np.array([1,2,3,4]))
func1 = func.deriv(1) # 得到func的一阶导函数
func2 = func.integ() # 得到func的一阶积分函数
x = np.linspace(-10,10,30)
y = func(x)
y1 = func1(x)
y2 = func2(x)
# 在一幅图上画三条曲线
# plt.plot(x,y,color='r',label='函数f(x)') # 红色实线
# plt.plot(x,y1,'g--',label="函数f'(x)") # 绿色虚线
# plt.plot(x,y2,'b-.',label="函数f^2(x)") # 蓝色点划线
# plt.legend() # 设置图例和其中的文本的显示
# plt.show() # 显示图片 # 用子图分别画图
plt.subplot(311)
plt.plot(x,y,'r')
plt.title('f(x)') plt.subplot(312)
plt.plot(x,y1,'g')
plt.title('f(x)的一阶导函数') plt.subplot(313)
plt.plot(x,y2,'b')
plt.title('f(x)的一阶积分函数') plt.show()

画散点图

import numpy as np
import matplotlib.pyplot as plt x = np.linspace(0, 10, 100)
plt.scatter(x, np.sin(x), marker='o') # marker 点的形状
plt.grid()
plt.show()

使用plt.sactter相比plt.plot在创建散点图时的优势是具有更高的灵活性,他可以单独控制每一个散点的不同属性(颜色、大小等),这样就可以通过(坐标位置、颜色、大小)这些多维信息,来表征更多的数据特征,
并进行更精细的控制。 我们来绘制这样一组散点图,每个点的位置坐标(x,y)是服从标准正态分布的随机值,点的颜色灰度值是位于(0,1)空间中的随机样本,点的大小是随机值得1000倍,单位是像素。
这样通过位置、大小、颜色等多维信息,就能更丰富的表现出散点数据背后所蕴含的多重信息了。
import numpy as np
import matplotlib.pyplot as plt rng = np.random.RandomState(0)
x = rng.randn(100)
y = rng.randn(100)
colors = rng.rand(100)
sizes = 1000*rng.rand(100)
plt.scatter(x,y,c=colors,s=sizes,alpha=0.3) # c 点的颜色 s 点的大小 alpha 点的透明度
plt.colorbar()
plt.grid(True)
plt.show()

画直方图

用bar

from matplotlib import pyplot as plt
import numpy as np #这节课,我们学习如何通过matplotlib绘制简单条形图
#第一步,取出一张白纸
fig=plt.figure(1) #第二步,确定绘图范围,由于只需要画一张图,所以我们将整张白纸作为绘图的范围
ax1=plt.subplot(111) #第三步,整理我们准备绘制的数据
data=np.array([15,20,18,25]) #第四步,准备绘制条形图,思考绘制条形图需要确定那些要素
#1、绘制的条形宽度
#2、绘制的条形位置(中心)
#3、条形图的高度(数据值)
width=0.5
x_bar=np.arange(4) #第五步,绘制条形图的主体,条形图实质上就是一系列的矩形元素,我们通过plt.bar函数来绘制条形图
rect=ax1.bar(left=x_bar,height=data,width=width,color="lightblue") #第六步,向各条形上添加数据标签
for rec in rect:
x=rec.get_x()
height=rec.get_height()
ax1.text(x+0.1,1.02*height,str(height)) #第七步,绘制x,y坐标轴刻度及标签,标题
ax1.set_xticks(x_bar)
ax1.set_xticklabels(("first","second","third","fourth"))
ax1.set_ylabel("sales")
ax1.set_title("The Sales in 2016")
ax1.grid(True)
ax1.set_ylim(0,28)
plt.show()

hist函数

   matplotlib.pyplot.hist(
x, bins=10, range=None, normed=False,
weights=None, cumulative=False, bottom=None,
histtype=u'bar', align=u'mid', orientation=u'vertical',
rwidth=None, log=False, color=None, label=None, stacked=False,
hold=None, **kwargs)

x : (n,) array or sequence of (n,) arrays

这个参数是指定每个bin(箱子)分布的数据,对应x轴

bins : integer or array_like, optional

这个参数指定bin(箱子)的个数,也就是总共有几条条状图

normed : boolean, optional

If True, the first element of the return tuple will be the counts normalized to form a probability density, i.e.,n/(len(x)`dbin)

这个参数指定密度,也就是每个条状图的占比例比,默认为1

color : color or array_like of colors or None, optional

这个指定条状图的颜色

我们先画一个最简单的频次直方图,生成1000个服从标准正态分布的随机变量,然后观察他们在每个点的出现次数

import numpy as np
import matplotlib.pyplot as plt
data = np.random.randn(1000)
# print(data)
ret = plt.hist(data)
print(ret)
plt.show()
(array([  15.,   39.,   88.,  188.,  216.,  200.,  123.,   84.,   36.,   11.]),
array([-2.68292233, -2.1248507 , -1.56677908, -1.00870746, -0.45063583,
0.10743579, 0.66550742, 1.22357904, 1.78165067, 2.33972229,
2.89779391]), <a list of 10 Patch objects>)
 

我们可以从程序结果看出,hist函数是有返回值的,返回的是一个2元元组,元组第一个ndarray对象是数据条的高度序列,元组第二个ndarray对象是每个数据条的边缘横坐标。

这个图里面只有10个数据条,但是很显然1000个随机变量的取值显然不止10个。在默认情况下,hist函数会将所有的随机变量取值划分为10个取值范围,然后统计每个取值范围内的变量数,

并绘就此图。

另外我们可以通过指定hist函数中的一些参数,来个性化的调整频次直方图的显示效果。

通过bins参数可以指定数据条的个数;normed可以指定是否将频数进行标准化,alpha指定透明度;还有histtype、color、edgecolor等线性、颜色等参数

import numpy as np
import matplotlib.pyplot as plt data = np.random.randn(1000)
plt.hist(data, bins=40, normed=True, alpha=0.5,
histtype='stepfilled',color='steelblue')
plt.grid(True)
plt.show()

bings将直方图的取值范围进行均等划分bings个区间;

normed =1 表示将出现频次进行了归一化。 normed=0,则为频次;

alpha表示直方图的透明度[0, 1] ;

histtype = ‘stepfilled’  表示去除条柱的黑色边框

结合频次直方图中的透明度这个参数,我们再来多做做文章,比如,我们想对不同均值、方差分布特征的正态分布随机变量进行对比,那该怎么做?显然我们想到的是把不同的几个正态分布图画在一张图里进行比较。

import numpy as np
import matplotlib.pyplot as plt data1 = np.random.normal(0, 0.8, 1000)
data2 = np.random.normal(-2, 1, 1000)
data3 = np.random.normal(3, 2, 1000)
plt.grid(True)
kwargs = dict(histtype='stepfilled', alpha=0.5, normed=True, bins=40)
plt.hist(data1, **kwargs)
plt.hist(data2, **kwargs)
plt.hist(data3, **kwargs)
plt.show()

基本误差线图

我们在图上画50个散点,然后每个点的误差设定为一个随机值,满足标准正态分布。同时作为对照,我们在另一个图中设置每个点的误差值为一个标量常数而非随机数组。当然这个例子可能没有什么物理意义,只是来演示一下这种图怎么画

import numpy as np
import matplotlib.pyplot as plt x = np.linspace(0, 10, 50)
dy = np.random.normal(0, 1, 50)
y = np.sin(x) + dy*np.random.randn(50)
plt.subplot(211)
plt.errorbar(x, y, yerr=dy, fmt='.k')
plt.grid(True)
plt.subplot(212)
plt.errorbar(x, y, yerr=0.8, fmt='o')
plt.grid(True)
plt.show()

matplotlib模块之plot画图的更多相关文章

  1. numpy模块、matplotlib模块、pandas模块

    目录 1. numpy模块 2. matplotlib模块 3. pandas模块 1. numpy模块 numpy模块的作用 用来做数据分析,对numpy数组(既有行又有列)--矩阵进行科学计算 实 ...

  2. windows下python安装Numpy、Scipy、matplotlib模块(转载)

    python下载链接     Numpy下载链接 python中Numpy包的安装及使用 Numpy包的安装 准备工作 Python安装 pip安装 将pip所在的文件夹添加到环境变量path路径中 ...

  3. 11-2 numpy/pandas/matplotlib模块

    目录 numpy模块 一维数组 二维数组 列表list和numpy的区别 获取多维数组的行和列 多维数组的索引 高级功能 多维数组的合并 通过函数方法创建多维数组 矩阵的运算 求最大值最小值 nump ...

  4. 【转】Pandas学习笔记(七)plot画图

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  5. 模块讲解---numpymo模块,matplotlib模块,pandas模块

    目录 numpy模块 matplotlib模块 pandas模块 numpy模块 numpy模块:用来做数据分析,对numpy数组(既有行又有列)--矩阵进行科学运算 在使用的时候,使用方法与其他的模 ...

  6. Matplotlib模块:绘图和可视化

    一.简单介绍Matplotlib 1.Matplotlib是一个强大的Python绘图和数据可视化的工具包 2.安装方法:pip install matplotlib 3.引用方法:import ma ...

  7. 关于plot画图的原理

    首先是导入的: Import matplotlib.pyplot as plt 这份导入要背住,没事就是需要你进行导入的: 然后就是画图了,下面举一个例子: import numpy as np im ...

  8. 为python安装matplotlib模块

    matplotlib是python中强大的画图模块. 首先确保已经安装python,然后用pip来安装matplotlib模块. 进入到cmd窗口下,执行python -m pip install - ...

  9. Python使用matplotlib模块绘制多条折线图、散点图

    用matplotlib模块 #!usr/bin/env python #encoding:utf-8 ''' __Author__:沂水寒城 功能:折线图.散点图测试 ''' import rando ...

随机推荐

  1. python 模块中__all__作用

    test.py文件开头写上__all__=[func1,func2] 当其他文件导入  from test import * 只会导出"[func1,func2]"里面的,其他调用 ...

  2. SQL.Cookbook 读书笔记4 插入更新和删除

    第四章 插入更新和删除 4.1 插入数据 ,'PROGRA','NEW YOURK'); 4.2 从一个表向另一个表中复制 insert into dept_east(deptno,dname,loc ...

  3. PHPStorm2017去掉参数提示 parameter name hints

    JetBrains 的各种语言的 IDE 都灰常灰常好用, 个个都是神器, PHPStorm 作为PHP开发的神器也不必多说了 今天升级到 PHPStorm 2017.1 发现增加了好些新功能, 有个 ...

  4. 47、ListView setSelection() 和 setSelectionFromTop()

    http://blog.csdn.net/manoel/article/details/39183025 http://blog.csdn.net/a859522265/article/details ...

  5. 2014江西理工大学C语言程序设计竞赛高级组题解

    1001 Beautiful Palindrome Number 枚举回文数字前半部分,然后判断该数字是否满足,复杂度为O(sqrt(n))! 1002 Recovery Sequence  本题的核 ...

  6. [Spring MVC]学习笔记--基础Servlet

    Servlet是一个用Java编写的应用程序,在服务器上运行,处理请求的信息并将其发送到客户端. Servlet的客户端提出请求并获得该请求的响应. 对于所有的客户端请求,只需要创建Servlet的实 ...

  7. 通过spring boot提供restful api

    1 将返回设置为produces = "application/json" 返回给客户端json格式的response. 2 对各种异常的处理 各种异常如何返回给客户端? 各种异常 ...

  8. 高并发服务器建议调小 TCP 协议的 time_wait 超时时间

    说明:操作系统默认 240 秒后,才会关闭处于 time_wait 状态的连接,在高并发访问下,服 务器端会因为处于 time_wait 的连接数太多,可能无法建立新的连接,所以需要在服务器上 调小此 ...

  9. hctf2016 fheap学习(FlappyPig队伍的解法)

    目录 漏洞原理 二次释放 如何在第二次释放前修改函数地址 fastbin的特性 修改函数指针流程 如何获得进程的加载基址 格式化字符串漏洞 确定printf函数在代码段中偏移 printf函数输出想要 ...

  10. PAT 1072. 开学寄语(20) JAVA

    下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其QQ,封其电脑,夺其手机,收其ipad,断其wifi,使其百无聊赖,然后,净面.理发.整衣,然后思过.读书.锻炼.明智.开悟.精进 ...