pythonjam可以画图吗_Matplotlib画图如此简单

jupyter入门之Matplotlib

一. Matplotlib基础知识Matplotlib中的基本图表包括的元素

x轴和y轴 axis 水平和垂直的轴线

轴标签 axisLabel 水平和垂直的轴标签

x轴和y轴刻度 tick 刻度标示坐标轴的分隔,包括最小刻度和最大刻度

x轴和y轴刻度标签 tick label 表示特定坐标轴的值

绘图区域(坐标系) axes 实际绘图的区域

画布 figure 呈现所有的坐标系

可以用下图来概括

179113216_1_20191229012642597

1.子画布

依赖导入import numpy as npimport pandas as pdfrom pandas import Series,DataFrameimport matplotlib.pyplot as plt%matplotlib inline

只含单一曲线的图

1、可以使用多个plot函数(推荐),在一个图中绘制多个曲线

2、也可以在一个plot函数中传入多对X,Y值,在一个图中绘制多个曲线x = np.arange(0,10,step=1)s1 = Series(x,index=list('abcdefghij'))s2 = Series(x**2,index=s1.index)# 索引和值一起设置plt.plot(x,x*2,x,x*3,x,x)

179113216_2_20191229012642660

设置子画布

axes = plt.subplot()# 221的含义是将画布分为两行两列,# axes1在第一个位置axes1 = plt.subplot(2,2,1)axes1.plot(x,x**2)# axes2在第四个位置axes2 = plt.subplot(2,2,4)axes2.plot(x,x**3)

179113216_3_20191229012642738# 子画布可以按照不同的比例进行拆分,可以在一个版面内共存,# 但是,如果两个子画布有重叠部分,后绘制的画布会覆盖先绘制的画布axes2 = plt.subplot(2,2,1)axes2.plot(x,x**2)axes1 = plt.subplot(3,3,1)axes1.plot(x,x*2)

网格线

2. 绘制正弦余弦x = np.linspace(0,2*np.pi,100)y1 = np.sin(x)y2 = np.cos(x)# 自动选择最近的画布进行开启plt.grid(True)plt.plot(x,y1,x,y2)

179113216_4_20191229012642816axes1 = plt.subplot(221)# True 开启网格线# linewidth设置网格线的粗细axes1.grid(True,linewidth=2)axes2 = plt.subplot(222)# alpha设置透明度 0-1之间的数axes2.grid(True,alpha=0.5)axes3 = plt.subplot(223)axes3.grid(True,color='green')axes4 = plt.subplot(224)# 设置网格线方向# linestyle/ls设置虚线axes4.grid(True,axis='x')

使用plt.grid方法可以开启网格线,使用plt面向对象的方法,创建多个子图显示不同网格线lw代表linewidth,线的粗细

alpha表示线的明暗程度

color代表颜色

axis显示轴向

179113216_5_20191229012642909

坐标轴界限

plt.axis([xmin,xmax,ymin,ymax])plt.plot(x,y1)# 注意:必须x,y轴同时设置界限plt.axis([-1,7.2,-2,2])

179113216_6_20191229012642972# 画圆x = np.linspace(-1,1,100)f = lambda x:(1-x**2)**0.5plt.plot(x,f(x),x,-f(x))# 使用axis函数设置坐标轴的显示风格plt.axis('equal')

179113216_7_20191229012643113axes = plt.subplot(111)axes.plot(x,f(x),x,-f(x))axes.axis('equal')

179113216_8_20191229012643206

xlim方法和ylim方法

除了plt.axis方法,还可以通过xlim,ylim方法设置坐标轴范围# 分别设置x轴和y轴界限plt.plot(x,y2)plt.xlim(-2,20)plt.ylim(-2,2)

179113216_9_20191229012643347

面向对象风格设置画布样式axes = plt.subplot(111)axes.plot(x,y2)# 使用面向对象风格设置画布样式,如果属性找不到,就使用set_XX函数设置# .+Tab键,快捷查看对象属性和方法axes.set_xlim(-5,5)axes.set_ylim(-5,5)

179113216_10_20191229012643410

坐标轴标签

xlabel方法和ylabel方法

plt.ylabel(‘y = x^2 + 5’,rotation = 60)旋转color 标签颜色

fontsize 字体大小

rotation 旋转角度plt.plot(x,y1)plt.xlabel('x_label',fontsize=35)plt.ylabel('y-label',color='pink',fontsize=40)

179113216_11_20191229012643456axes = plt.subplot(111)axes.plot(x,y1)# HTML支持的字体设置,在这里都可以使用color fontsize linestyle linewidth# fontsize 字体大小# color 字体颜色# rotation 旋转角度axes.set_ylabel('y_label',fontsize=30,color='red',rotation=90)# 使用字典设置字体axes.set_xlabel('x_label',fontdict={ 'fontsize':40, 'color':'blue'})

179113216_12_20191229012643519

标题

plt.title()方法loc {left,center,right}

color 标签颜色

fontsize 字体大小

rotation 旋转角度plt.plot(x,y1)# loc设置标题显示位置(left,right,center)plt.title('SIN(X)',fontsize=60,color='purple',rotation=45,loc='left')

179113216_13_20191229012643628

注:matplotlib显示中文如何处理?

Windows:from pylab import mpl# 指定默认字体mpl.rcParams['font.sans-serif'] = ['FangSong'] # 解决保存图像是负号'-'显示为方块的问题mpl.rcParams['axes.unicode_minus'] = False

Mac:import numpy as npimport matplotlibimport matplotlib.pyplot as pltfrom matplotlib.font_manager import FontProperties# 导入本地字体文件font = FontProperties(fname='/Library/Fonts/Songti.ttc')# Fixing random state for reproducibilitynp.random.seed(19680801)# 设置为FALSE 解决负号显示为框的问题matplotlib.rcParams['axes.unicode_minus'] = Falsefig, ax = plt.subplots()ax.plot(10*np.random.randn(100), 10*np.random.randn(100), 'o')# 用fontproperties参数设置字体为自定义字体ax.set_title(u'散点图',fontproperties=font,fontsize=30)plt.show()

3.图例

原始方法# 相关依赖导入...df = DataFrame(data=np.random.randint(0,100,size=(5,3)),columns=list('abc'))df.plot()

179113216_14_20191229012643706

legend方法

两种传参方法:分别在plot函数中增加label参数,再调用legend()方法显示

直接在legend方法中传入字符串列表x = np.arange(0,10,step=1)plt.plot(x,x,x,x*2,x,x/2)# 传入一个列表参数,参数内容就是每一个data的说明plt.legend(['fast','normal','slow'])

179113216_15_20191229012643769

第二种传参plt.plot(x,x,label='normal')plt.plot(x,x*2,label='fast')plt.plot(x,x/2,label='slow')plt.legend(loc=10)

179113216_16_20191229012643847

loc参数

loc参数用于设置图例标签的位置,一般在legend函数内

matplotlib已经预定义好几种数字表示的位置

loc参数可以是2元素的元组,表示图例左下角的坐标

[0,0] 左下

[0,1] 左上

[1,0] 右下

[1,1] 右上

图例也可以超过图的界限loc = (-0.1,0.9)plt.plot(x,x,label='normal')plt.plot(x,x*2,label='fast')plt.plot(x,x/2,label='slow')plt.legend(loc=[0.4,1.1],ncol=3)

179113216_17_20191229012643894

ncol参数

ncol控制图例中有几列,在legend中设置ncol,需要设置loc

linestyle、color、marker

修改线条样式

4.保存图片

使用figure对象的savefig的函数

filename

含有文件路径的字符串或Python的文件型对象。图像格式由文件扩展名推断得出,例如,.pdf推断出PDF,.png推断出PNG (“png”、“pdf”、“svg”、“ps”、“eps”……)

dpi

图像分辨率(每英寸点数),默认为100

facecolor

图像的背景色,默认为“w”(白色)# 获取figure对象(画布对象)# 设置画布的背景色figure = plt.figure(facecolor='cyan')# 设置坐标系的背景色axes = plt.subplot(111,facecolor='blue')# 设置线条的颜色axes.plot(x,x,x,x*2,color='yellow')# dpi设置像素大小figure.savefig('18011.png',dpi=50)

179113216_18_20191229012643988

二. 设置plot的风格和样式plot语句中支持除X,Y以外的参数,以字符串形式存在,来控制颜色、线型、点型等要素,语法形式为: plt.plot(X, Y, ‘format’, …)

1.点和线的样式

颜色

参数color或cplt.plot(x,x,color='c')

常用色彩名与别名

透明度

alphaplt.plot(x,x,alpha=0.3,color='r')

背景色

设置背景色,通过plt.subplot()方法传入facecolor参数,来设置坐标系的背景色# 设置坐标系的背景plt.subplot(facecolor='red')plt.plot(x,np.sin(x))

线型

参数linestyle或lsplt.plot(x,x,ls=':')plt.plot(x,x*2,ls='steps')plt.plot(x,x/2,ls='None')

常用线型

179113216_19_2019122901264481

线宽

linewidth或lw参数

不同宽度的破折线

dashes参数 eg.dashes = [20,50,5,2,10,5]

设置破折号序列各段的宽度# dashes自定义破折线的样式plt.plot(x,x,dashes=[10,2,3,5])

点型marker 设置点形

markersize 设置点形大小x = np.random.randint(0,10,size=6)plt.plot(x,marker='s',markersize=60)

179113216_20_20191229012644128

常用点型参数设置

179113216_21_20191229012644222plt.plot(x,marker='4',markersize=30)plt.plot(x,x*2,marker='3',markersize=40)

179113216_22_20191229012644300

179113216_23_20191229012644410plt.plot(np.random.randint(0,10,size=10),marker='h',markersize=20,label='六边形1',)plt.plot(np.random.randint(0,10,size=10),marker='H',markersize=20,label='六边形2')plt.plot(np.random.randint(0,10,size=10),marker='8',markersize=20,label='八边形')plt.plot(np.random.randint(0,10,size=10),marker='p',markersize=20,label='五边形')plt.legend()

179113216_24_20191229012644550

标记参数

179113216_25_20191229012644738

2.多参数连用颜色、点型、线型,可以把几种参数写在一个字符串内进行设置 ‘r-.o’# 参数连用需要对不同的线进行分别设置plt.plot(x,x,'r:v',x,x*2,'b--h')

179113216_26_20191229012644894

更多点和线的设置

markeredgecolor = ‘green’,

markeredgewidth = 2,

markerfacecolor = ‘purple’

179113216_27_20191229012644972

多个曲线同一设置属性名声明,不可以多参数连用

plt.plot(x1, y1, x2, y2, fmt, …)x = np.arange(0,10,1)# 统一设置plt.plot(x,x,x,x*2,x,x/2,linewidth=3,color='blue')# 分别设置plt.plot(x,x,'r-.s',x,x*2,'b--h')

多曲线不同设置多个都进行设置时,多参数连用 plt.plot(x1, y1, fmt1, x2, y2, fmt2, …)

三种设置方式

1.向方法传入关键字参数

1. import matplotlib as mpl

2.对实例使用一系列的setter方法

plt.plot()方法返回一个包含所有线的列表,设置每一个线需要获取该线对象eg: lines = plt.plot(); line = lines[0]

line.set_linewith()

line.set_linestyle()

line.set_color()

3.对坐标系使用一系列的setter方法

axes = plt.subplot()获取坐标系set_title()

set_facecolor()

set_xticks、set_yticks 设置刻度值

set_xticklabels、set_yticklabels 设置刻度名称

例:lines = plt.plot(x,x,x,x*2,x,x/2)# 根据line对象设置line的属性lines[0].set_linewidth(3)lines[1].set_color('cyan')lines[2].set_linestyle('--')

179113216_28_2019122901264550

X、Y轴坐标刻度

plt.xticks()和plt.yticks()方法需指定刻度值和刻度名称 plt.xticks([刻度列表],[名称列表])

支持fontsize、rotation、color等参数设置x = np.linspace(0,2*np.pi,100)plt.plot(x,np.sin(x))# xticks函数设置坐标轴刻度和标签plt.xticks([0,np.pi/2,np.pi,3*np.pi/2,2*np.pi],['0','π/2','π','3π/2','2π'])

179113216_29_20191229012645128axes = plt.subplot(111)axes.plot(x,np.sin(x))# 使用画布对象设置坐标轴刻度和坐标轴刻度标签axes.set_xticks([0,np.pi/2,np.pi,3*np.pi/2,2*np.pi])axes.set_xticklabels(['0','$\pi$/2','π','3π/2','2π'],fontsize=20)axes.set_yticks([-1,0,1])axes.set_yticklabels(['min',0,'max'],fontsize=20)

179113216_30_20191229012645222

三、2D图形

1.直方图【直方图的参数只有一个x!!!不像条形图需要传入x,y】

hist()的参数

bins

可以是一个bin数量的整数值,也可以是表示bin的一个序列。默认值为10

normed

如果值为True,直方图的值将进行归一化处理,形成概率密度,默认值为False

color

指定直方图的颜色。可以是单一颜色值或颜色的序列。如果指定了多个数据集合,颜色序列将会设置为相同的顺序。如果未指定,将会使用一个默认的线条颜色

orientation

通过设置orientation为horizontal创建水平直方图。默认值为verticalx = np.random.randint(0,100,size=100)plt.hist(x,bins=5)

2. 条形图【条形图有两个参数x,y】

width 纵向设置条形宽度

height 横向设置条形高度

bar()、barh()x = np.array([2,5,7,9,4,3,8])# x 就是底轴刻度标签# height 就是柱形图的柱高# width 表示柱宽 (0-1取值)plt.bar(x=list('abcdefg'),height=x,width=1)# y 就是底轴刻度标签# width 就是柱形图的柱高# height 表示柱宽plt.barh(y=list('abcdefg'),width=x,height=1)

3. 饼图【饼图也只有一个参数x!】

pie()

饼图适合展示各部分占总体的比例,条形图适合比较各部分的大小

普通部分占满饼图x = [45,6]plt.pie(x)

普通未占满饼图x = [0.4,0.3]plt.pie(x)饼图阴影、分裂等属性设置labels参数设置每一块的标签;labeldistance参数设置标签距离圆心的距离(比例值,只能设置一个浮点小数)autopct参数设置比例值的显示格式(%1.1f%%);pctdistance参数设置比例值文字距离圆心的距离explode参数设置每一块顶点距圆形的长度(比例值,列表);colors参数设置每一块的颜色(列表);shadow参数为布尔值,设置是否绘制阴影startangle参数设置饼图起始角度# labeldistance只能设置一个小数plt.pie(x,labels=['男','女'],labeldistance=0.3, autopct="%1.2f%%",pctdistance=0.8, explode=[0.1,0.0], colors=['blue','yellow'], startangle=90, shadow=True)

179113216_31_20191229012645331

4. 散点图【 散点图需要两个参数x,y,但此时x不是表示x轴的刻度,而是每个点的横坐标!】

scatter()x = np.random.normal(size=1000)y = np.random.normal(size=1000)# 生成1000个随机颜色colors = np.random.random(size=(1000,3))# 使用c参数来设置颜色plt.scatter(x,y,marker='d',c=colors)

179113216_32_20191229012645394

四.3D图

曲面图导包

from mpl_toolkits.mplot3d.axes3d import Axes3D

使用mershgrid函数切割x,y轴

X,Y = np.meshgrid(x, y)

创建3d坐标系

axes = plt.subplot(projection=’3d’)

绘制3d图形

p = axes.plot_surface(X,Y,Z,color=’red’,cmap=’summer’,rstride=5,cstride=5)

添加colorbar

plt.colorbar(p,shrink=0.5)

例:def createZ(x,y): return np.sin(x) + np.cos(y)*2 - np.pi/5from mpl_toolkits.mplot3d.axes3d import Axes3Daxes = plt.subplot(projection='3d')x = np.linspace(-np.pi,np.pi,100)y = np.linspace(-np.pi,np.pi,100)# 使用x,y生成一组网格X,Y = np.meshgrid(x,y)Z = createZ(X,Y)p = axes.plot_surface(X,Y,Z,cmap='summer',rstride=5,cstride=5)plt.colorbar(p,shrink=0.5)

179113216_33_20191229012645503

五.玫瑰图/极坐标条形图创建极坐标,设置polar属性plt.axes(polar = True)绘制极坐标条形图index = np.arange(-np.pi,np.pi,2*np.pi/6)plt.bar(x=index ,height = [1,2,3,4,5,6] ,width = 2*np.pi/6)# 玫瑰图x = np.array([2,5,7,9,4,3,8])plt.axes(polar = True)plt.bar(x=list('abcdefg'),height=x)

179113216_34_20191229012645613

六.图形内的文字、注释、箭头

1.控制文字属性的方法

Prop

所有的方法会返回一个matplotlib.text.Text对象# 画布figure = plt.figure()# figure.text(x=1,y=1,s='这是figure对象的注释')figure.suptitle('figure title')# 等差数列x = np.linspace(-np.pi,np.pi,100)axes1 = plt.subplot(221)axes1.plot(x,np.sin(x))# x,y是以坐标轴刻度为准的一组数据,描述了注释信息的注释位置axes1.text(x=0.5,y=0.5,s='这是一段注释')axes2 = plt.subplot(222)axes2.plot(x,np.cos(x),color='red')

179113216_35_20191229012645706

2.图形内的文字

text()

3. 注释

annotate()xy参数设置箭头指示的位置xytext参数设置注释文字的位置arrowprops参数以字典的形式设置箭头的样式width参数设置箭头长方形部分的宽度headlength参数设置箭头尖端的长度,headwidth参数设置箭头尖端底部的宽度shrink参数设置箭头顶点、尾部与指示点、注释文字的距离(比例值),可以理解为控制箭头的长度figure = plt.figure(figsize=(8,6))axes = plt.subplot(111)axes.plot(x,np.sin(x))# s 注释的文字# xy 箭头指向的位置# xytext 注释文字放置的位置# arrowprops没有arrowstyle键的设置方式axes.annotate(s='this is a annotate',xy=(0.5,0.5),xytext=(0.8,0.8), arrowprops = { 'width':10, 'headlength':12, 'headwidth':15, 'shrink':0.2 })# 使用arrowstyle设置箭头样式axes.annotate(s='this is a good text',xy=(-0.2,-0.2),xytext=(-0.4,-0.6), arrowprops = { 'arrowstyle': 'fancy' })

179113216_36_20191229012645753

179113216_37_20191229012645831

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值