准备工作

安装所需的库

打开cmd

首先再键盘上面找到winR键。
图片源自百度
同时按下winR键,在输入框中输入**cmd**
image.png
点击确定打开命令提示符
image.png
下面介绍几个常见的用于绘图的库
在命令提示符中输入相应的安装命令即可。

安装numpy

  1. pip install numpy -i https://pypi.douban.com/simple

安装pandas

  1. pip install pandas -i https://pypi.douban.com/simple

安装matpoltlib

  1. pip install matplotlib -i https://pypi.douban.com/simple

下面讲解其中基本绘图的用法。


Matpoltlib

申明

本小节笔记摘自于:
python如何使用Matplotlib画图(基础篇)
python中matplotlib的颜色及形状_Mortal的博客-CSDN博客_matplotlib 颜色


导入模块

在写入的python文件开头写下如下语句导入模块:

  1. #导入matplotlib的pyplot模块
  2. import matplotlib.pyplot as plt

绘制折线图

实例

先看最简单的例子:

  1. import matplotlib.pyplot as plt
  2. x = [1, 2, 3, 4]
  3. y = [1, 4, 9, 16]
  4. plt.plot(x, y)
  5. plt.show()

运行结果如下:
image.png

语法讲解

首先第一行:import matplotlib.pyplot as plt,作用就是导入matplotlib里面的pyplot模块,并且别名为**plt**
3/4行分别定义了横纵坐标,也就是x轴和y轴
plot(x,y)用于绘制图像。
show()用于显示图像。
两个函数都是plt内部的方法所以需要通过plt.进行调用。

属性设置

首先看一下plot()的完整用法:

  1. # 所有可选参数
  2. plt.plot(x,y,color,linestyle=,linewidth,marker,markeredgecolor,markeredgwidth,markerfacecolor,markersize,label)

这里选择常用的参数进行讲解:

  1. plt.plot(x, y, linewidth = '1', label='test',color=' red ', linestyle=':', marker='|')

线条宽度(linewidth)

这个比较好理解,就不多解说了。

图例(label)

这个需要和后面的legend()联合使用,详情看后面的讲解。

线条样式(linestyle)

表示线条的样式,常用的样式有如下几种:

标记字符 还可使用 说明
‘-’ “solid” 实线
‘–’ “dashed” 破折线
‘-.’ “dashdot” 点划线
‘:’ “dotted” 虚线
’ ’ ‘none’ 无线条

标注形状(marker)

简单的来讲就是每个用什么符号进行表示。
常见有:

标记字符 还可使用 说明
‘.’ point marker 点标记
‘,’ pixel marker 像素标记(极小点)
‘o’ circle marker 实心圈标记
‘v’ triangle_down marker 倒三角标记
‘^’ triangle_up marker 上三角标记
‘<’ triangle_left marker 左三角标记
‘d’ thin_diamond marker 受菱形标记
‘|’ vline marker 垂直线标记
‘_’ hline marker 水平线标记

颜色(color)

支持的颜色有:

  1. cnames = {
  2. 'aliceblue': '#F0F8FF',
  3. 'antiquewhite': '#FAEBD7',
  4. 'aqua': '#00FFFF',
  5. 'aquamarine': '#7FFFD4',
  6. 'azure': '#F0FFFF',
  7. 'beige': '#F5F5DC',
  8. 'bisque': '#FFE4C4',
  9. 'black': '#000000',
  10. 'blanchedalmond': '#FFEBCD',
  11. 'blue': '#0000FF',
  12. 'blueviolet': '#8A2BE2',
  13. 'brown': '#A52A2A',
  14. 'burlywood': '#DEB887',
  15. 'cadetblue': '#5F9EA0',
  16. 'chartreuse': '#7FFF00',
  17. 'chocolate': '#D2691E',
  18. 'coral': '#FF7F50',
  19. 'cornflowerblue': '#6495ED',
  20. 'cornsilk': '#FFF8DC',
  21. 'crimson': '#DC143C',
  22. 'cyan': '#00FFFF',
  23. 'darkblue': '#00008B',
  24. 'darkcyan': '#008B8B',
  25. 'darkgoldenrod': '#B8860B',
  26. 'darkgray': '#A9A9A9',
  27. 'darkgreen': '#006400',
  28. 'darkkhaki': '#BDB76B',
  29. 'darkmagenta': '#8B008B',
  30. 'darkolivegreen': '#556B2F',
  31. 'darkorange': '#FF8C00',
  32. 'darkorchid': '#9932CC',
  33. 'darkred': '#8B0000',
  34. 'darksalmon': '#E9967A',
  35. 'darkseagreen': '#8FBC8F',
  36. 'darkslateblue': '#483D8B',
  37. 'darkslategray': '#2F4F4F',
  38. 'darkturquoise': '#00CED1',
  39. 'darkviolet': '#9400D3',
  40. 'deeppink': '#FF1493',
  41. 'deepskyblue': '#00BFFF',
  42. 'dimgray': '#696969',
  43. 'dodgerblue': '#1E90FF',
  44. 'firebrick': '#B22222',
  45. 'floralwhite': '#FFFAF0',
  46. 'forestgreen': '#228B22',
  47. 'fuchsia': '#FF00FF',
  48. 'gainsboro': '#DCDCDC',
  49. 'ghostwhite': '#F8F8FF',
  50. 'gold': '#FFD700',
  51. 'goldenrod': '#DAA520',
  52. 'gray': '#808080',
  53. 'green': '#008000',
  54. 'greenyellow': '#ADFF2F',
  55. 'honeydew': '#F0FFF0',
  56. 'hotpink': '#FF69B4',
  57. 'indianred': '#CD5C5C',
  58. 'indigo': '#4B0082',
  59. 'ivory': '#FFFFF0',
  60. 'khaki': '#F0E68C',
  61. 'lavender': '#E6E6FA',
  62. 'lavenderblush': '#FFF0F5',
  63. 'lawngreen': '#7CFC00',
  64. 'lemonchiffon': '#FFFACD',
  65. 'lightblue': '#ADD8E6',
  66. 'lightcoral': '#F08080',
  67. 'lightcyan': '#E0FFFF',
  68. 'lightgoldenrodyellow': '#FAFAD2',
  69. 'lightgreen': '#90EE90',
  70. 'lightgray': '#D3D3D3',
  71. 'lightpink': '#FFB6C1',
  72. 'lightsalmon': '#FFA07A',
  73. 'lightseagreen': '#20B2AA',
  74. 'lightskyblue': '#87CEFA',
  75. 'lightslategray': '#778899',
  76. 'lightsteelblue': '#B0C4DE',
  77. 'lightyellow': '#FFFFE0',
  78. 'lime': '#00FF00',
  79. 'limegreen': '#32CD32',
  80. 'linen': '#FAF0E6',
  81. 'magenta': '#FF00FF',
  82. 'maroon': '#800000',
  83. 'mediumaquamarine': '#66CDAA',
  84. 'mediumblue': '#0000CD',
  85. 'mediumorchid': '#BA55D3',
  86. 'mediumpurple': '#9370DB',
  87. 'mediumseagreen': '#3CB371',
  88. 'mediumslateblue': '#7B68EE',
  89. 'mediumspringgreen': '#00FA9A',
  90. 'mediumturquoise': '#48D1CC',
  91. 'mediumvioletred': '#C71585',
  92. 'midnightblue': '#191970',
  93. 'mintcream': '#F5FFFA',
  94. 'mistyrose': '#FFE4E1',
  95. 'moccasin': '#FFE4B5',
  96. 'navajowhite': '#FFDEAD',
  97. 'navy': '#000080',
  98. 'oldlace': '#FDF5E6',
  99. 'olive': '#808000',
  100. 'olivedrab': '#6B8E23',
  101. 'orange': '#FFA500',
  102. 'orangered': '#FF4500',
  103. 'orchid': '#DA70D6',
  104. 'palegoldenrod': '#EEE8AA',
  105. 'palegreen': '#98FB98',
  106. 'paleturquoise': '#AFEEEE',
  107. 'palevioletred': '#DB7093',
  108. 'papayawhip': '#FFEFD5',
  109. 'peachpuff': '#FFDAB9',
  110. 'peru': '#CD853F',
  111. 'pink': '#FFC0CB',
  112. 'plum': '#DDA0DD',
  113. 'powderblue': '#B0E0E6',
  114. 'purple': '#800080',
  115. 'red': '#FF0000',
  116. 'rosybrown': '#BC8F8F',
  117. 'royalblue': '#4169E1',
  118. 'saddlebrown': '#8B4513',
  119. 'salmon': '#FA8072',
  120. 'sandybrown': '#FAA460',
  121. 'seagreen': '#2E8B57',
  122. 'seashell': '#FFF5EE',
  123. 'sienna': '#A0522D',
  124. 'silver': '#C0C0C0',
  125. 'skyblue': '#87CEEB',
  126. 'slateblue': '#6A5ACD',
  127. 'slategray': '#708090',
  128. 'snow': '#FFFAFA',
  129. 'springgreen': '#00FF7F',
  130. 'steelblue': '#4682B4',
  131. 'tan': '#D2B48C',
  132. 'teal': '#008080',
  133. 'thistle': '#D8BFD8',
  134. 'tomato': '#FF6347',
  135. 'turquoise': '#40E0D0',
  136. 'violet': '#EE82EE',
  137. 'wheat': '#F5DEB3',
  138. 'white': '#FFFFFF',
  139. 'whitesmoke': '#F5F5F5',
  140. 'yellow': '#FFFF00',
  141. 'yellowgreen': '#9ACD32'}

综合实例
  1. import matplotlib.pyplot as plt
  2. x = [1, 2, 3, 4]
  3. y = [1, 4, 9, 16]
  4. plt.plot(x, y, linewidth = '1',color='red', linestyle=':', marker='|')
  5. plt.show()
  1. 运行结果如下:<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/22022942/1646291313055-63594670-8428-4adb-91cf-629f448d4812.png#clientId=ua77e808a-70d2-4&from=paste&height=342&id=u5540e5e5&originHeight=683&originWidth=802&originalType=binary&ratio=1&rotation=0&showTitle=false&size=35279&status=done&style=none&taskId=uf613ffd5-de11-4076-a11a-e5af3efa595&title=&width=401)

其他属性

控制坐标轴范围(axis)

语法格式为:axis([x1,x2,y1,y2]),表示x轴的范围是[x1,x2],y轴的范围是[y1,y2]

  1. import matplotlib.pyplot as plt
  2. x = [1, 2, 3, 4]
  3. y = [1, 4, 9, 16]
  4. plt.plot(x, y, linewidth='1', color='red', linestyle=':', marker='|')
  5. plt.axis([1, 3, 1, 10])
  6. plt.show()

image.png

设置标签和标题等
  • xlabel设置x轴的名称
  • ylabel设置y轴的名称
  • title设置绘图的标题。

实例演示

  1. import matplotlib.pyplot as plt
  2. # 下面这两行代码是为了防止中文不显示
  3. import matplotlib
  4. matplotlib.rc("font",family='YouYuan')
  5. x = [1, 2, 3, 4]
  6. y = [1, 4, 9, 16]
  7. plt.plot(x, y, linewidth='1', color='red', linestyle=':', marker='|')
  8. plt.axis([1, 3, 1, 10])
  9. plt.xlabel("这是x轴")
  10. plt.ylabel("这是y轴")
  11. plt.title("这是测试绘图")
  12. plt.show()

image.png

中文不显示问题

解决中文不显示问题可以看下面这个链接:
彻底解决Python里matplotlib不显示中文的问题

显示图例
  1. import matplotlib.pyplot as plt
  2. import matplotlib
  3. matplotlib.rc("font",family='YouYuan')
  4. x = [1, 2, 3, 4]
  5. y = [1, 4, 9, 16]
  6. plt.plot(x, y, linewidth='1',label='test', color='red', linestyle=':', marker='|')
  7. plt.axis([1, 3, 1, 10])
  8. plt.xlabel("这是x轴")
  9. plt.ylabel("这是y轴")
  10. plt.title("这是测试绘图")
  11. plt.legend() # 显示图例
  12. plt.show()

image.png

显示网格
  1. import matplotlib.pyplot as plt
  2. import matplotlib
  3. matplotlib.rc("font",family='YouYuan')
  4. x = [1, 2, 3, 4]
  5. y = [1, 4, 9, 16]
  6. plt.plot(x, y, linewidth='1',label='test', color='red', linestyle=':', marker='|')
  7. plt.axis([1, 3, 1, 10])
  8. plt.xlabel("这是x轴")
  9. plt.ylabel("这是y轴")
  10. plt.title("这是测试绘图")
  11. plt.legend() # 显示图例
  12. plt.grid(True) # 显示网格
  13. plt.show()

image.png


绘制散点图

基本语法

  1. plt.scatter(x,y,s,c,marker,linewidths,edgecolors)

参数说明

参数 说明
(x,y) 散点的位置
s 每个点的面积,即散点的大小。若只有一个具体值时,则所有点的大小都一样。也可呈现多个值,这样就成了气泡图
c 每个点的颜色,可多样
marker 标记,同折线图中marker
linewidths 散点线宽
edgecolors 散点外轮廓的颜色

实例

  1. import matplotlib.pyplot as plt
  2. x = [1, 2, 3, 4]
  3. y = [1, 4, 9, 16]
  4. plt.scatter(x, y,s=100,c="red")
  5. plt.show()

image.png

绘制柱状图

基本语法

  1. plot.bar(x,height,width=0.8,bottom=None,align='center',color,edgecolor)

参数说明

参数 说明
x 表示在什么位置显示柱形图
height 柱子高度
width 每根柱子的宽度,可各不相同
bottom 每根柱子的底部位置,可各不相同
align 柱子的位置与x值的关系,可选center、edge两个参数,center表示柱子位于x值的中心位置,edge表示边缘位置
color 柱子颜色
edgecolor 柱子边缘的颜色

实例讲解

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import matplotlib
  4. matplotlib.rc("font",family='YouYuan')
  5. # 这里是使用numpy库来定义 x 和 y传入的参数为数组
  6. x = np.array(["东区", "西区", "南区", "北区"])
  7. y = np.array([8566, 6482, 5335, 7310])
  8. plt.bar(x, y, width=0.5, align="center", label="任务量")
  9. plt.title("全国各分区任务量", loc="center")
  10. plt.xlabel('分区')
  11. plt.ylabel('任务量')
  12. plt.legend() # 显示图例
  13. plt.show()

关于numpy后续会讲解。

image.png

增加数据标签

如果想要在每个条形图上面标明数字,可以用以下的方法:

  1. plt.text(x,
  2. y,
  3. string,
  4. fontsize=15,
  5. verticalalignment="top",
  6. horizontalalignment="right"
  7. )
  1. 其中:
  • x,y:表示坐标值上的值
  • string:表示说明文字
  • fontsize:表示字体大小
  • verticalalignment垂直对齐方式 ,参数:[ ‘center’ | ‘top’ | ‘bottom’ | ‘baseline’ ],可以简写为va
  • horizontalalignment水平对齐方式 ,参数:[ ‘center’ | ‘right’ | ‘left’ ],可以简写为ha

举个例子:

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import matplotlib
  4. matplotlib.rc("font",family='YouYuan')
  5. x = np.array(["东区", "西区", "南区", "北区"])
  6. y = np.array([8566, 6482, 5335, 7310])
  7. plt.bar(x, y, width=0.5, align="center", label="任务量")
  8. plt.title("全国各分区任务量", loc="center")
  9. # 添加数据标签
  10. for a, b in zip(x, y):
  11. plt.text(a, b, b, ha='center', va="bottom", fontsize=12, color="r")
  12. plt.xlabel('分区')
  13. plt.ylabel('任务量')
  14. plt.legend() # 显示图例
  15. plt.show()
  1. 这里先解释一下`zip()`函数。<br />`zip()` 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成**一个个元组**,然后返回由这些元组组成的列表。<br />例如:
  1. a = [1,2,3]
  2. b = [4,5,6]
  3. zipped = zip(a,b) # 打包为元组的列表
  4. # 返回结果为 :[(1, 4), (2, 5), (3, 6)]
  1. 接着分析`plt.text(a, b, b, ha='center', va="bottom", fontsize=12, color="r")`<br />后面四个属性都在上面有讲解,这里不再赘述。<br />前面的`a,b,b`中前两个分别代表`x``y`,后面一个`b`表示的是在条形图上面**显示的数据**。<br />运行结果如下:<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/22022942/1646295699613-60e22713-3a73-440e-97da-86520ee3db3d.png#clientId=ua77e808a-70d2-4&from=paste&height=342&id=u4053eb49&originHeight=683&originWidth=802&originalType=binary&ratio=1&rotation=0&showTitle=false&size=56942&status=done&style=none&taskId=ud070dc05-7825-466e-a3a2-02386fdfa70&title=&width=401)

簇状柱形图

直接展示代码

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import matplotlib
  4. matplotlib.rc("font",family='YouYuan')
  5. x = np.array([1, 2, 3, 4])
  6. y1 = np.array([8566, 6482, 5335, 7310])
  7. y2 = np.array([4283, 2667, 3655, 3241])
  8. plt.bar(x, y1, width=0.3, label="任务量")
  9. plt.bar(x + 0.3, y2, width=0.3, label="完成量") # x+0.3相当于完成量的每个柱子右移0.3
  10. plt.title("全国各分区任务量", loc="center")
  11. # 添加数据标签
  12. for a, b in zip(x, y1):
  13. plt.text(a, b, b, ha='center', va="bottom", fontsize=12, color="blue")
  14. # 注意这里为了使标签对齐,需要讲a向右偏移0.3个单位
  15. for a, b in zip(x, y2):
  16. plt.text(a+0.3, b, b, ha='center', va="bottom", fontsize=12, color="g")
  17. plt.xlabel('区域')
  18. plt.ylabel('任务情况')
  19. # 设置x轴刻度值
  20. # 设置的时候是x向右便宜0.15个单位
  21. plt.xticks(x + 0.15, ["东区", "西区", "南区", "北区"])
  22. plt.grid(False)
  23. plt.legend() # 显示图例
  24. plt.show()

image.png
比较简单这里就不自己阐述了,都写在注释里面了,可以自行调试代码查看运行效果。

堆积柱状图

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import matplotlib
  4. matplotlib.rc("font",family='YouYuan')
  5. x = np.array(["东区", "西区", "南区", "北区"])
  6. y1 = np.array([8566, 6482, 5335, 7310])
  7. y2 = np.array([4283, 2667, 3655, 3241])
  8. plt.bar(x, y1, width=0.3, label="任务量")
  9. plt.bar(x, y2, width=0.3, label="完成量")
  10. plt.title("全国各分区任务量", loc="center")
  11. # 添加数据标签
  12. for a, b in zip(x, y1):
  13. plt.text(a, b, b, ha='center', va="bottom", fontsize=12, color="blue")
  14. for a, b in zip(x, y2):
  15. plt.text(a, b, b, ha='center', va="bottom", fontsize=12, color="white")
  16. plt.xlabel('区域')
  17. plt.ylabel('任务情况')
  18. plt.grid(False)
  19. plt.legend(loc="upper center", ncol=2)
  20. plt.show()
  1. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/22022942/1646296437648-c8e904fe-2784-477a-969f-128938597bed.png#clientId=ua77e808a-70d2-4&from=paste&height=342&id=uecb9d02c&originHeight=683&originWidth=802&originalType=binary&ratio=1&rotation=0&showTitle=false&size=60735&status=done&style=none&taskId=uc907cf14-fa9e-48bf-846f-5736fb5c151&title=&width=401)