首页 > 编程知识 正文

pyplot教程,python中matplotlib.pyplot

时间:2023-05-03 13:03:10 阅读:164028 作者:1493

目录

pyplot介绍

格式化绘图样式

设置和保存图像大小

刻度的设定

用关键字字符串绘图

用分类变量绘图

使用文本创建直方图

注释文本

画散布图

绘制条形图

对数轴和其他非线性轴

本文主要参考matploylib官方文档和黑马程序员数据处理的视频。

pyplot概述matplotlib.pyplot是一组使matplotlib像MATLAB一样工作的命令样式函数。 每个pyplot功能对图形进行一些更改,包括创建图形、在图形中创建出图区域、绘制出图区域中的线以及使用标签进行出图。

使用pyplot时,可视化效果非常快。

importmatplotlib.pyplotasplt.plot ([ 1,2,3,4 ] ) PLT.ylabel ) ' somenumbers ' ) plt.show ) )。

plot ) )为命令提供单个列表或数组时,matplotlib假设它是一个y值序列,并自动生成x值。 python的范围从0开始,因此默认的x向量长度与y相同,但从0开始。 因此,x数据为。 [ 0,1,2,3 ]

plot ) )是通用命令,接受任意数量的参数。 例如,要绘制x和y之间的关系,请发出以下命令:

PLT.plot ([ 1,2,3,4 ],[ 1,4,9,16 ] )

显示中文字符

matplotlib.pyplot默认不支持中文字符。 在代码前添加以下命令是最简单的方法。

PLT.rcparams [ ' font.sans-serif ' ]=[ ' simhei ' ]

也可以通过使用frontname='SimHei '或设置词典来实现中文字符的显示。

对于每对x和y参数,格式出图样式都有可选的第三个参数。 这是表示出图颜色和线条类型的格式字符串。 格式字符串中的字符和符号来自MATLAB,用于连接颜色字符串和线型字符串。 默认格式字符串为“b-”,这是蓝色实线。 例如,要用红色圆圈绘制上述内容,请发出以下命令

PLT.plot ([ 1,2,3,4 ],[ 1,4,9,16 ],' ro ' ) PLT.axis ([ 0,6,0,20 ] ) ) ymin,xmax,xmax,xmax通常,numax 实际上,所有序列都在内部转换为numpy数组。 下楼

面的示例说明了使用数组在一条命令中绘制几行具有不同格式样式的行。

import numpy as np# evenly sampled time at 200ms intervalst = np.arange(0., 5., 0.2)# red dashes, blue squares and green trianglesplt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')plt.show()

    

 图片大小设置与保存 x = range(2,12,2)y = [3,6,2,7,8]#设置图片大小,像素plt.figure(figsize=(10,4),dpi=70)#绘制折线图,颜色为红色,线宽为2,透明度为0.5plt.plot(x,y,'r',label='line 1',linewidth=2,alpha=0.5)#绘制蓝色点plt.plot(x,y,'bo')#保存图片plt.savefig("./image.png")#显示图片plt.show() 刻度设置

直接举个例子

x = range(2,12,2)y = [3,6,2,7,8]#设置图片大小,像素plt.figure(figsize=(10,4),dpi=90)#绘制折线图,颜色为红色,线宽为2,透明度为0.5plt.plot(x,y,'r',label='line 1',linewidth=2,alpha=0.5)#绘制蓝色点plt.plot(x,y,'bo',label ='point')#添加图例,不然线条的label不会显示plt.legend()#设置刻度x_label = ["1月{}号".format(i) for i in x]plt.xticks(range(2,12,2),x_label,fontname='SimHei',rotation=45)#fontsize可设置字体大小plt.yticks(range(0,10))#保存图片plt.savefig("./image.png")#显示图片plt.show()

   

用关键字字符串绘图

在某些情况下,您拥有某种格式的数据,该格式允许您使用字符串访问特定变量。Matplotlib允许您为此类对象提供data关键字参数。如果提供的话,您可以使用与这些变量相对应的字符串生成图。

data = {'a': np.arange(50), 'c': np.random.randint(0, 50, 50), 'd': np.random.randn(50)}data['b'] = data['a'] + 10 * np.random.randn(50)data['d'] = np.abs(data['d']) * 100plt.scatter('a', 'b', c='c', s='d', data=data)plt.xlabel('entry a')plt.ylabel('entry b')plt.show()

    

用分类变量绘图

Matplotlib允许将类别变量直接传递给许多绘图函数。例如:

names = ['group_a', 'group_b', 'group_c']values = [1, 10, 100]plt.figure(figsize=(9, 3))plt.subplot(131)plt.bar(names, values)plt.subplot(132)plt.scatter(names, values)plt.subplot(133)plt.plot(names, values)plt.suptitle('Categorical Plotting')plt.show()

   

使用文本&绘制直方图

该texy()命令可用于在任意位置添加文本,xlabel(),ylabel(),title()可用于在指示的位置添加文本

mu, sigma = 100, 15x = mu + sigma * np.random.randn(10000)# the histogram of the datan, bins, patches = plt.hist(x, 50, density=1, facecolor='g', alpha=0.75)#x轴名称plt.xlabel('Smarts')#y轴名称plt.ylabel('Probability')#图片名称plt.title('Histogram of IQ')#设置文本信息plt.text(60, .025, r'$mu=100, sigma=15$')#设置刻度plt.axis([40, 160, 0, 0.03])#显示网格plt.grid(True)plt.show()

   

注释文字

我们使用annotate()方法来完成注释。在注释中,有两点需要考虑:由参数表示的要注释xy的位置和text的位置xytext。这两个参数都是元组(x, y)。

ax = plt.subplot(111)t = np.arange(0.0, 5.0, 0.01)s = np.cos(2*np.pi*t)line, = plt.plot(t, s, lw=2)plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5), arrowprops=dict(facecolor='black', shrink=0.05), )plt.ylim(-2, 2)plt.show()

    

绘制散点图 plt.rcParams['font.sans-serif']=['SimHei']y_3 = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]y_10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]x_3 = range(1,32)x_10 = range(51,82)#设置图形大小plt.figure(figsize=(15,6),dpi=80)#使用scatter方法绘制散点图,和之前绘制折线图的唯一区别plt.scatter(x_3,y_3,label="3月份")plt.scatter(x_10,y_10,label="10月份")#调整x轴的刻度_x = list(x_3)+list(x_10)_xtick_labels = ["3月{}日".format(i) for i in x_3]_xtick_labels += ["10月{}日".format(i-50) for i in x_10]plt.xticks(_x[::3],_xtick_labels[::3],fontname='SimHei',fontsize=15,rotation=45)plt.yticks(fontsize=20)#添加图例plt.legend(loc="upper left",fontsize=20)#添加描述信息plt.xlabel("时间",fontname='SimHei',fontsize=20)plt.ylabel("温度",fontname='SimHei',fontsize=20)plt.title("标题",fontname='SimHei',fontsize=20)#展示plt.show() 绘制条形图 a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","fkdds3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊",]b=[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]#设置图形大小plt.figure(figsize=(20,8),dpi=80)#绘制条形图barh为横向条形图,bar为纵向条形图plt.barh(range(len(a)),b,height=0.3,color="orange")#设置字符串到x轴plt.yticks(range(len(a)),a)#显示网格plt.grid(alpha=0.3)plt.show()

 多个条形图组合:

a = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]b_16 = [15746,312,4497,319]b_15 = [12357,156,2045,168]b_14 = [2358,399,2358,362]bar_width = 0.2x_14 = list(range(len(a)))x_15 = [i+bar_width for i in x_14]x_16 = [i+bar_width*2 for i in x_14]#设置图形大小plt.figure(figsize=(20,8),dpi=80)plt.bar(range(len(a)),b_14,width=bar_width,label="9月14日")plt.bar(x_15,b_15,width=bar_width,label="9月15日")plt.bar(x_16,b_16,width=bar_width,label="9月16日")#设置图例plt.legend(fontsize=16)#设置x轴的刻度plt.xticks(x_15,a,fontsize=20)plt.yticks(fontsize=20)plt.show()

对数轴和其他非线性轴

matplotlib.pyplot不仅支持线性轴刻度,还支持对数和对数刻度。如果数据跨多个数量级,则通常使用此方法。更改轴的比例很容易:

plt.xscale('log')

 下面显示了四个图的示例,这些图的y轴数据相同且比例不同。

from matplotlib.ticker import NullFormatter # useful for `logit` scale# Fixing random state for reproducibilitynp.random.seed(19680801)# make up some data in the open interval (0, 1)y = np.random.normal(loc=0.5, scale=0.4, size=1000)y = y[(y > 0) & (y < 1)]y.sort()x = np.arange(len(y))# plot with various axes scalesplt.figure()# linearplt.subplot(221)plt.plot(x, y)plt.yscale('linear')plt.title('linear')plt.grid(True)# logplt.subplot(222)plt.plot(x, y)plt.yscale('log')plt.title('log')plt.grid(True)# symmetric logplt.subplot(223)plt.plot(x, y - y.mean())plt.yscale('symlog', linthreshy=0.01)plt.title('symlog')plt.grid(True)# logitplt.subplot(224)plt.plot(x, y)plt.yscale('logit')plt.title('logit')plt.grid(True)# Adjust the subplot layout, because the logit one may take more space# than usual, due to y-tick labels like "1 - 10^{-3}"plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.25, wspace=0.35)plt.show()

    

 

   

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。