python强大的绘图模块matplotlib示例讲解

Matplotlib 是 Python 的绘图库。作为程序员,经常需要进行绘图,在我自己的工作中,如果需要绘图,一般都是将数据导入到excel中,然后通过excel生成图表,这样操作起来还是比较繁琐的,所以最近学习了一下Matplotlib模块,将该模块的常用的绘图手段和大家分享一下,提高大家在工作中的效率;

在示例中,我们主要用到Matplotlib和Numpy这两个模块来为大家演示Python强大的绘图功能,相信大家通过我下面的10个示例,基本上可以满足大家日常工作的需求,再次强调一下,只是简单的用法,大家千万不要想通过这篇博客获取到太高深的用法。

下面进入正题

1、绘制一条直线

代码如下,下面的代码大家应该都可以看懂吧

1

2

3

4

5

6

7

8

9

10

11

12

13

14

# 导入常用的包

import numpy as np

import matplotlib.pyplot as plt

  

# 生成-1到1的数据,一共生成100个,也可以生成1到-1的数据,这些数据是平均分布的

# 定义x轴的数据

= np.linspace(-1,1,100)

  

# 定义y轴的数据

= * 2 + 100

plt.plot(x,y)

  

# 显示图像

plt.show()

  

效果如下

 

2、创建一个画布,同时设置该画布的大小

代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

import numpy as np

  

import matplotlib.pyplot as plt

  

= np.linspace(-1,1,100)

  

y1 = * 2 + 100

  

  

y2 = ** 2

  

# 创建一个画布

  

# figsize:设置画布的大小

plt.figure(figsize=(2,2))

plt.plot(x,y1)

  

# 创建第二个画布

plt.figure()

plt.plot(x,y2)

  

plt.show()

  

效果如下,会同时显示两张画布

 

 3、在一张画布中画两条线,同时可以设置线的颜色,宽度,和风格

代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

import numpy as np

  

import matplotlib.pyplot as plt

  

= np.linspace(-1,1,100)

  

y1 = * 2 + 0.5

  

  

y2 = ** 2

  

  

  

# color:表示设置线的颜色

# linewidth:表示设置线的宽度

# linestyle:表示设置线的风格

plt.figure(figsize=(2,2))

plt.plot(x,y1,color='r',linewidth=1.0,linestyle='--')

  

plt.plot(x,y2,color='b',linewidth=5.0,linestyle='-')

  

plt.show()

  

# 上面的效果就是2条曲线被放到一个画布中

  

效果如下

 

 4、限制x轴,y轴的显示范围,为x轴和y轴添加描述,替换x轴和y轴的显示信息

代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

import numpy as np

  

import matplotlib.pyplot as plt

  

# 设置坐标轴

= np.linspace(-3,3,100)

  

y1 = * 2 + 0.5

  

y2 = ** 2

  

  

plt.figure(figsize=(6,6))

plt.plot(x,y1,color='r',linewidth=1.0,linestyle='--')

  

plt.plot(x,y2,color='b',linewidth=5.0,linestyle='-')

  

# 限制x轴的显示范围

plt.xlim((-1,2))

  

# 限制y轴的显示范围

plt.ylim((-1,5))

  

# 给x轴加描述

plt.xlabel("xxxxxx")

# 给y轴加描述

plt.ylabel("yyyyyy")

  

  

  

# 替换一下横坐标的显示

temp = np.linspace(-2,2,11)

plt.xticks(temp)

  

# 替换纵坐标的标签,用level0代替之前的-1

plt.yticks([-1,0,1,2,3,4,5],["level0","level1","level2","level3","level4","level5","level6"])

  

plt.show()

  

效果如下

 

 5、对边框进行设置,调整x轴和y轴的位置

代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

import numpy as np

  

import matplotlib.pyplot as plt

  

# 设置坐标轴

= np.linspace(-3,3,100)

  

y1 = * 2 + 0.5

  

y2 = ** 2

  

  

plt.figure(figsize=(6,6))

plt.plot(x,y1,color='r',linewidth=1.0,linestyle='--')

  

plt.plot(x,y2,color='b',linewidth=5.0,linestyle='-')

  

# 限制x轴的显示范围

plt.xlim((-1,2))

  

# 限制y轴的显示范围

plt.ylim((-1,5))

  

# 给x轴加描述

plt.xlabel("xxxxxx")

# 给y轴加描述

plt.ylabel("yyyyyy")

  

  

  

# 替换一下横坐标的显示

temp = np.linspace(-2,2,11)

plt.xticks(temp)

  

# 替换纵坐标的标签,用level0代替之前的-1

# plt.yticks([-1,0,1,2,3,4,5],["level0","level1","level2","level3","level4","level5","level6"])

  

# 获取边框

ax = plt.gca()

# 设置右边框的颜色为红色

ax.spines["right"].set_color("r")

  

# 去掉上边框

ax.spines["top"].set_color(None)

  

# 把x轴的刻度设置为bottom

ax.xaxis.set_ticks_position("bottom")

# 把y轴的客户设置为left

ax.yaxis.set_ticks_position("left")

  

# 设置x和y交汇的点,x轴是0,y是也是0,也就是x轴和y轴的都是0点交汇

ax.spines["bottom"].set_position(("data",0))

ax.spines["left"].set_position(("data",0))

  

plt.show()

  

效果如下

 

6、为画布添加图例

代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

#Auther Bob

#--*--conding:utf-8 --*--

import numpy as np

 

import matplotlib.pyplot as plt

 

# 设置图例

= np.linspace(-33100)

 

y1 = * 2 + 0.5

 

y2 = ** 2

 

plt.figure(figsize=(66))

 

# 首先要为两条线分别取名,这里的逗号必须要有

l1, = plt.plot(x, y1, color='r', linewidth=1.0, linestyle='--')

 

l2, = plt.plot(x, y2, color='b', linewidth=5.0, linestyle='-')

 

# handles控制图例中要说明的线

# labels为两条线分别取一个label

# loc控制图例的显示位置,一般用best,由代码为我们选择最优的位置即可

 

plt.legend(handles=[l1, l2], labels=["test1""test2"], loc='best')

 

# 限制x轴的显示范围

plt.xlim((-12))

 

# 限制y轴的显示范围

plt.ylim((-15))

 

# 给x轴加描述

plt.xlabel("xxxxxx")

# 给y轴加描述

plt.ylabel("yyyyyy")

 

# 替换一下横坐标的显示

temp = np.linspace(-2211)

plt.xticks(temp)

 

# 替换纵坐标的标签,用level0代替之前的-1

plt.yticks([-1012345], ["level0""level1""level2""level3""level4""level5""level6"])

 

# 为图像加一个图例,用来对图像做说明

 

 

 

plt.show()

  

效果如下

 

 7、为图像添加描述

代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

import numpy as np

  

import matplotlib.pyplot as plt

  

# 为图像做标注

= np.linspace(-3,3,100)

  

y1 = * 2

  

# y2 = x ** 2

  

  

plt.figure(figsize=(6,6))

  

  

plt.plot(x,y1,color='r',linewidth=1.0,linestyle='-')

  

  

  

  

  

# 给x轴加描述

plt.xlabel("xxxxxx")

# 给y轴加描述

plt.ylabel("yyyyyy")

  

# ======================================================

# 在x轴为x0,y轴为x0 * 2上画一个点,这个点的颜色是红色,大小为50,这个大小就是这个点显示的大小

x0 = 0.5

y0 = x0 * 2

# scatter是画点的方法

plt.scatter(x0,y0,color='g',s=50)

  

# 画线

# 这条线是第一个点的坐标为[x0,y0],第二个点的坐标为[x0,-6],后面就是设置线的风格,线的颜色,线的宽度

  

plt.plot([x0,x0],[y0,-6],color='k',linestyle='--',linewidth=1.0)

  

  

  

# 画箭头和描述

  

  

# xy代表我们的点

# xytext代码我们描述的位置,基于当前的点,在x轴+30,在y轴-30

# r'$2*x={n}$是我们要显示的文字信息,格式必须要这样

# textcoords表示作为起点

# fontsize表示设置字体大小

# arrowprops设置箭头

# arrowstyle设置箭头的样式

# connectionstyle设置风格.2表示弧度

plt.annotate(r'$2*0.5={n}$'.format(n = y0),xy=(x0,y0),xytext=(+30,-30),textcoords='offset points',fontsize=10,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))

  

# 显示文字描述,从x轴为-1,y轴为2开始显示,$$中就是要显示的字符,这里如果要显示空格,则需要转义

# fontdict设置字体

plt.text(-1,2,r'$1\ 2\ 3\ 4$',fontdict={"size":16,"color":"r"})

  

# =========================================================

  

# 为图像加一个图例,用来对图像做说明

  

plt.show()

  

效果如下

 

8、绘制散点图

代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

import numpy as np

  

import matplotlib.pyplot as plt

  

  

  

  

# 绘制散点图

# plt.scatter(np.arange(1,10,1),np.arange(10,19,1))

  

# plt.scatter(np.linspace(-3,3,10),np.linspace(-3,3,10))

  

  

= np.random.normal(1,10,500)

= np.random.normal(1,10,500)

  

print(x)

# s设置点的大小

# c是颜色

# alpha是透明度

plt.scatter(x,y,s=50,c='b',alpha=0.5)

plt.show()

  

效果如下

 

9、绘制直方图

代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

import numpy as np

  

import matplotlib.pyplot as plt

  

  

# 绘制直方图

= np.arange(10)

= ** 2 + 10

  

  

# facecolor设置柱体的颜色

# edgecolor设置边框的颜色

  

plt.bar(x,y,facecolor='g',edgecolor='r')

  

# 绘制翻转过来的直方图

# plt.bar(x,-y)

  

#显示文字

for x,y in zip(x,y):

    plt.text(x,y,"{f}".format(f=y),ha="center",va='bottom')

plt.show()

  

效果如下

 

10、一张画布显示多张图像

代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

#Auther Bob

#--*--conding:utf-8 --*--

import numpy as np

import matplotlib.pyplot as plt

 

 

 

 

# plt.figure()

# 有一个两行两列的单元格,这个位于第一个单元格

# plt.subplot(2,2,1)

 

# 画一条【0,0】-----》【1,1】的直线

# plt.plot([0,1],[0,1])

 

 

 

# 有一个两行两列的单元格,这个位于第一个单元格

# plt.subplot(2,2,2)

 

# 画一条【0,0】-----》【1,1】的直线

# plt.plot([0,1],[0,1])

 

 

 

# 有一个两行两列的单元格,这个位于第一个单元格

# plt.subplot(2,2,3)

 

# 画一条【0,0】-----》【1,1】的直线

# plt.plot([1,0],[0,1])

# plt.show()

 

 

 

# 上面的例子,每张图他显示的大小是一样的,我们想显示不同的大小该怎么办?

 

plt.figure()

# 有一个两行三列的单元格,这个位于第一个单元格

plt.subplot(2,1,1)

 

# 画一条【0,0】-----》【1,1】的直线

plt.plot([0,1],[0,1])

 

 

 

# 有一个两行三列的单元格,这个位于第四个单元格,因为第一个单元格占了3个位子,所以这里就是第四个

plt.subplot(2,3,4)

 

# 画一条【0,0】-----》【1,1】的直线

plt.plot([0,1],[0,1])

 

 

 

# 有一个两行三列的单元格,这个位于第五个单元格

plt.subplot(2,3,5)

 

# 画一条【0,0】-----》【1,1】的直线

plt.plot([1,0],[0,1])

plt.show()

  

效果如下

 

11、matplotlib模块中的颜色和线条风格,取自菜鸟教程

作为线性图的替代,可以通过向 plot() 函数添加格式字符串来显示离散值。 可以使用以下格式化字符。

字符描述
'-'实线样式
'--'短横线样式
'-.'点划线样式
':'虚线样式
'.'点标记
','像素标记
'o'圆标记
'v'倒三角标记
'^'正三角标记
'<'左三角标记
'>'右三角标记
'1'下箭头标记
'2'上箭头标记
'3'左箭头标记
'4'右箭头标记
's'正方形标记
'p'五边形标记
'*'星形标记
'h'六边形标记 1
'H'六边形标记 2
'+'加号标记
'x'X 标记
'D'菱形标记
'd'窄菱形标记
'|'竖直线标记
'_'水平线标记
 

以下是颜色的缩写:

字符颜色
'b'蓝色
'g'绿色
'r'红色
'c'青色
'm'品红色
'y'黄色
'k'黑色
'w'白色

http://www.hbzjk.net/skiHnPk7T/news/XBlgoH.html
http://www.hbzjk.net/sW0M3QHRM/news/AFDE46.html
http://www.hbzjk.net/sMUXmbkCf/news/KM1NZ8.html
http://www.hbzjk.net/sQ2IEqga1/news/WdgNGl.html
http://www.hbzjk.net/sXPNoYGfo/news/ihqnQl.html
http://www.hbzjk.net/sE4hPfXfP/news/bJO5hI.html
http://www.hbzjk.net/s8HDllm8m/news/SjPgVr.html
http://www.hbzjk.net/s9APBlBq8/news/JLRCa6.html
http://www.hbzjk.net/sQXfKnfpV/news/hqGSaa.html
http://www.hbzjk.net/sJ4d18X4J/news/61GgmG.html
http://www.hbzjk.net/sYlLh8XQP/news/GKXeXg.html
http://www.hbzjk.net/sEdak6E3a/news/bgWT5o.html
http://www.hbzjk.net/seGPfSmSr/news/L98T2g.html
http://www.hbzjk.net/s1To92B1T/news/lkH5oD.html
http://www.hbzjk.net/shIb6fmcl/news/TKqHTJ.html
http://www.hbzjk.net/sPBKf5AP6/news/jWMLiO.html
http://www.hbzjk.net/sLRriH0c8/news/T3IBVc.html
http://www.hbzjk.net/s5QU89dqN/news/nWoHO6.html
http://www.hbzjk.net/sg2FhrFgT/news/Eb9YTW.html
http://www.hbzjk.net/sE8enNWER/news/V5lLMP.html
http://www.hbzjk.net/se5BViFEW/news/Qo9kdo.html
http://www.hbzjk.net/sAApfGCL6/news/OEC2qd.html
http://www.hbzjk.net/soNSLGUTk/news/aco8NE.html
http://www.hbzjk.net/s8B3D45gn/news/F4cKf3.html
http://www.hbzjk.net/sbOZLk1bO/news/6PCEp1.html
http://www.hbzjk.net/sBNO7jeab/news/3Zfq22.html
http://www.hbzjk.net/smMPdGnCF/news/AOVAHG.html
http://www.hbzjk.net/sfb2031VX/news/WUadac.html
http://www.hbzjk.net/sLgW8g4mQ/news/drGdka.html
http://www.hbzjk.net/sA0KeKEbc/news/PZrfbq.html
http://www.hbzjk.net/sLIFNjXQo/news/EI6DjW.html
http://www.hbzjk.net/sp6o5gQ37/news/YAeWdj.html
http://www.hbzjk.net/sbALMWAZ0/news/hH0feN.html
http://www.hbzjk.net/s4c4XPFr2/news/hSHMRg.html
http://www.hbzjk.net/s3o3baAi3/news/0GR2Bj.html
http://www.hbzjk.net/sb2BCG0Jj/news/pV7S6X.html
http://www.hbzjk.net/smbHeFnpC/news/fgphOG.html
http://www.hbzjk.net/sFmqUVQ7I/news/a676OM.html
http://www.hbzjk.net/s1nXhWQWH/news/ZeR6gf.html
http://www.hbzjk.net/sFpmFkVfX/news/nMZXa8.html
http://www.hbzjk.net/sWXTZ98Ti/news/M3DkU5.html
http://www.hbzjk.net/s04K9pMCW/news/7lhUNP.html
http://www.hbzjk.net/sjFJfMoo8/news/K0FgCe.html
http://www.hbzjk.net/sO9LCdUq0/news/WX9QKa.html
http://www.hbzjk.net/sHQRhBmRV/news/Qhp8cf.html
http://www.hbzjk.net/sCnRYBbG1/news/N1AGce.html
http://www.hbzjk.net/sUc4keGeG/news/PF80JN.html
http://www.hbzjk.net/sLOMBe5ql/news/eggVNp.html
http://www.hbzjk.net/s3RT3e8hk/news/Cgj7RS.html
http://www.hbzjk.net/slJDQhRBd/news/fBkh2L.html
http://www.hbzjk.net/sJTIRqI0C/news/c6LeWf.html
http://www.hbzjk.net/sCnEYGrZr/news/UVL4Dj.html

分类: python基础学习

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值