当前位置:   article > 正文

python学习之路--可视化利器matplotlib(上)_在plt.bar下面插入plt.table

在plt.bar下面插入plt.table

前几期已经把读写数据、数据预处理等介绍完了,今天我们接着介绍一个可视化的库matplotlib,虽说现在已经有了更为高级的可视化库,如seaborn,ploty,pyecharts等,但是matplotlib是最为基础,作图思路最为全面的可视化库,学会了matplotlib之后,再学其他的就显得更为简单。

1.作图之前

为了使得作图能正常的显示,作图之前往往都需要添加以下代码:

  1. #解决中文乱码的问题
  2. plt.rcParams["font.sans-serif"] = "SimHei"
  3. #解决负号不能正常显示的问题
  4. plt.rcParams["axes.unicode_minus"] = False
  5. #直接在jupyter notebook展示图片
  6. %matplotlib inline
  7. #作图使用svg格式更为清晰
  8. %config InlineBackend.figure_format = "svg"

1.1 可视化伪代码

  1. 设置画布的大小:plt.figure(figsize = (x,y))
  2. 建立坐标系: add_subplot()、plt.subplot()、plt.subplots()
  3. 作图函数: plot、bar、scatter、barh、pie、boxplot
  4. 设置图表标题: plt.title()
  5. 设置x轴y轴标题: plt.x/ylabel()
  6. 设置x轴y轴刻度: plt.x/yticks()
  7. 设置x轴y轴范围: plt.x/ylims()
  8. 添加数据标签: plt.text()
  9. 添加注释: plt.annotate()
  10. 添加数据表格: plt.table()
  11. 添加图例: plt.legend()
  12. 展示结果: plt.show()

1.2 坐标系的建立

坐标系的建立方法有好几种,add_subplot()是面向对象的方法,也就是得先建立画布,然后在画布上建立坐标系,然后才能在坐标系上作图;而后两种(plt.subplot()、plt.subplots())属于函数式方法,是直接调用plt里面的函数建立的坐标系,区别在于plt.subplot()一次只建立指定的几个坐标系,而plt.subplots()是一次性全部坐标系都建立出来,比如:

  1. # add_subplot(行,列,第几个)建立坐标系
  2. import matplotlib.pyplot as plt
  3. fig = plt.figure()
  4. ax1 = fig.add_subplot(1,2,1)
  5. ax2 = fig.add_subplot(1,2,2)

  1. #plt.subplot(行,列,第几个)建立坐标系
  2. plt.subplot(2,2,1)
  3. plt.subplot(2,2,4)

  1. #plt.subplots(行,列)建立坐标系
  2. plt.subplots(1,2)

1.3 作图函数

作图函数包括很多,常用的有折线图plot,柱形图bar,条形图barh,饼图pie,散点图scatter,面积图stackplot,雷达图polar,热力图imshow等,这里先不具体介绍,等其他参数介绍完之后实例介绍。

1.4 图表的标题

图表的标题通过plt.title()设置,格式如下:

plt.title("xxxx",loc = "left/right/center",fontsize = x,color = x,fontwidth = x)

1.5 坐标轴设置

(1) 轴标题的设置:plt.xlabel/ylabel("xxxx",labelpad = x,fontsize = x,color = x,fontwidth = x)

(2) 坐标系范围:plt.xlim/ylim(x,y)

(3) 坐标轴的刻度:plt.xticks/yticks(range,labels = [])

1.6 附加元素

(1) 网格线设置:plt.grid(True,axis = "x/y",linestyle = x,linewidth = x);

不设定axes时,默认xy轴的网格线都打开;

linestyle表示线的风格,有实线(solid),虚线(dashed),线点(dashdot),虚点线(dotted)。

(2)数据标签的设置:plt.text(x,y,z,ha = "left/right/center",va = "top/bottom/center", fontsize = s,color = s);

ha表示水平的位置,va表示垂直的位置;

格式如下:

  1. for a,b in zip(x,y):
  2. plt.text(a,b,b,ha = xx,va = xx)

(3)注释:plt.annotate("xxx",xy = (x,y),xytext = (x,y),arrowprops = dict(arrowstyle = "x",facecolor = x));

arrowstyle表示注释的风格,常用的有"->","-]","-","<-","<->","fancy"(头小尾大的箭头);

xy表示需要注释的位置,而xytext表示注释文本所在的位置。

(4)数据表格:plt.table(cellText,cellColours,cellLoc,rowLabels,rowColours,rowLoc,colLabels,colColours,colLoc,loc);

数据表格包含三要素,分别是数值,行和列,数值通过cellText设置,行列标签通过rowLabels和colLabels设置;

需要注意的是数值、行、列的颜色填充分别是cellColours,rowColours和colColours,若写成cellColors,程序会报错。

(5)图例的设置:plt.legend(ncol = x,loc = x);

ncol表示图列分为几列来显示,默认是一列。

1.7 折线图

折线图的格式如下:

plt.plot(x,y,linestyle = s,linewidth = s,color = s,marker = s,markersize = s,markeredgecolor = s, markeredgewidth = s,markerfacecolor = s,label);

marker表示点的风格:常用的有"+","o","*","s"(正方形),"p"(五边形),"h"(六边形),"d"(小菱形);

常用的颜色有:"b"(蓝色),"g"(绿色),"k"(黑色),"w"(白色),"r"(红色),"y"(黄色),"c"(青色),"m"(品红)。

  1. import numpy as np
  2. plt.subplot(1,1,1)
  3. x = np.arange(10)
  4. y = np.arange(10)
  5. plt.plot(x,y,
  6. linestyle = "dashdot",
  7. linewidth = 2,
  8. color = "c",
  9. marker = "*",
  10. markersize = 10,
  11. markerfacecolor = "m",
  12. markeredgecolor = "m",
  13. label = "示例1")
  14. plt.title("示例1",fontsize = 15,color = "k",loc = "center")
  15. plt.xlabel("x轴")
  16. plt.ylabel("y轴")
  17. plt.grid(b = True,axis = "x",linestyle = "dashed")
  18. for a,b in zip(x,y):
  19. plt.text(a,b-0.5,b,va = "center",ha = "center")
  20. plt.annotate("这是坐标xy都是5的位置",xy = (5,5),xytext=(6,4),arrowprops = dict(arrowstyle = "fancy",facecolor = "r"))
  21. plt.legend()
  22. <matplotlib.legend.Legend at 0x19fccb46f60>

 

1.8 柱形图与条形图

柱形图与条形图的原理相似,只是height跟width两个参数含义交换,这里只介绍柱形图。

柱形图的格式如下:plt.bar(x,height = s,width = s,color = s,edgecolor = s,align = center/edge);

align表示柱子与x的关系,center表示柱子位于x轴的中心,edge表示柱子位于x轴的边缘;

height表示柱子的高度,就是y值;

width表示柱子的宽度。

  1. import numpy as np
  2. x = np.arange(1,5)
  3. y1 = np.arange(1,5)
  4. y2 = np.arange(2,6)
  5. plt.subplot(2,2,1)
  6. plt.bar(x,
  7. height = y1,
  8. width = 0.3,
  9. align = "center",
  10. facecolor = "c")
  11. for a,b in zip(x,y1):
  12. plt.text(a,b,b,va = "center",ha = "center")
  13. #簇状柱形图
  14. plt.subplot(2,2,2)
  15. plt.bar(x,
  16. height = y1,
  17. width = 0.3,
  18. align = "center",
  19. facecolor = "c",
  20. label = "示例1")
  21. plt.bar(x+0.3,
  22. height = y2,
  23. width = 0.3,
  24. align = "center",
  25. facecolor = "m",
  26. label = "示例2")
  27. for a,b in zip(x,y1):
  28. plt.text(a,b,b,va = "center",ha = "center")
  29. for a,b in zip(x,y2):
  30. plt.text(a+0.3,b,b,va = "center",ha = "center")
  31. plt.legend()
  32. #堆积柱形图
  33. plt.subplot(2,2,3)
  34. plt.bar(x,
  35. height = y1,
  36. width = 0.3,
  37. align = "center",
  38. facecolor = "c",
  39. label = "示例1")
  40. plt.bar(x,
  41. height = y2,
  42. width = 0.3,
  43. align = "center",
  44. facecolor = "m",
  45. label = "示例2")
  46. for a,b in zip(x,y1):
  47. plt.text(a,b,b,va = "center",ha = "center")
  48. for a,b in zip(x,y2):
  49. plt.text(a,b,b,va = "center",ha = "center")
  50. plt.legend()
  51. #堆积柱形图
  52. plt.subplot(2,2,4)
  53. plt.bar(x,
  54. height = y2,
  55. width = 0.3,
  56. align = "center",
  57. facecolor = "m",
  58. label = "示例2")
  59. plt.bar(x,
  60. height = y1,
  61. width = 0.3,
  62. align = "center",
  63. facecolor = "c",
  64. label = "示例1")
  65. for a,b in zip(x,y1):
  66. plt.text(a,b,b,va = "bottom",ha = "center")
  67. for a,b in zip(x,y2):
  68. plt.text(a,b,b,va = "top",ha = "center")
  69. plt.legend()
  70. <matplotlib.legend.Legend at 0x19fce42c5c0>

簇状柱形图的原理就是在同样的x值做不同的柱子时,第二个柱子往左或者往右移动一个柱子的宽度,如上图所示的0.3;

堆积柱形图的原理是只要是在相同的x值作不同的柱子时,柱子会自动叠加,这里需要注意的是更大的y值需要先作图,不然的话会像图3所示,正确的做法如图四所示,y2的值更大,所以先作图。

1.9 饼图

饼图的格式如下:plt.pie(x,explode = [],labels = [],autopct = s,pctdistance = s,radius = s,labeldistance = s, shadow = True/False,wedgeprops = dict(width = s,edgecolor = s),center = s, counterclock = True/False)

explode表示饼图中每一块离圆心的位置;

autopct表示数据标签中数值的百分比格式;

pctdistance表示数据标签距离圆心的距离;

radius表示饼图的半径;

labeldistance表示每一块图例离圆心的距离;

shadow表示是否有阴影;

wedgeprops表示每一块的边界属性;

center表示圆心的位置;

counterclock表示是否让饼图逆时针显示。

  1. #饼图
  2. plt.subplot(1,2,1)
  3. x = [i**2 for i in np.arange(1,5)]
  4. plt.pie(x,
  5. explode= [0,0,0.2,0],
  6. labels = ["东","南","西","北"],
  7. colors = ["b","steelblue","c","g"],
  8. autopct = "%.1f%%",
  9. radius = 1,
  10. pctdistance= 0.7,
  11. labeldistance = 0.5,
  12. shadow= True,
  13. counterclock = False)
  14. #圆环图
  15. plt.subplot(1,2,2)
  16. x = [i**2 for i in np.arange(1,5)]
  17. plt.pie(x,
  18. labels = ["东","南","西","北"],
  19. radius = 1,
  20. labeldistance = 1.2,
  21. wedgeprops= dict(width = 0.3,edgecolor = "w"))
  22. plt.pie(x,
  23. radius = 0.8,
  24. wedgeprops= dict(width = 0.3,edgecolor = "w"))

圆环图的原理就是设置不同的半径,然后通过设置边界的宽度与颜色来达到分离的效果。

1.10 散点图

散点图的格式如下:plt.scatter(x,y,marker = a,s = a,c = a,edgecolors = a,linewidths = a)

s表示散点的大小;

c表示散点的颜色;

edgecolors表示散点边缘的颜色;

linewidths表示散点的线宽。

  1. # 散点图
  2. x = np.arange(1,5)
  3. y = [i**2 for i in x]
  4. plt.subplot(1,2,1)
  5. plt.scatter(x,
  6. y,
  7. marker = "d",
  8. s = 200,
  9. c = "c",
  10. edgecolors = "m")
  11. for a,b in zip(x,y):
  12. plt.text(a,b,b,ha = "center",va = "center")
  13. #气泡图
  14. plt.subplot(1,2,2)
  15. plt.scatter(x,
  16. y,
  17. marker = "o",
  18. s = y*200, #根据y值设置散点的大小
  19. c = y) #根据y值生成不同的颜色
  20. for a,b in zip(x,y):
  21. plt.text(a,b,b,ha = "center",va = "center")

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/993072
推荐阅读
相关标签
  

闽ICP备14008679号