当前位置:   article > 正文

Matplotlib实现数据可视化

Matplotlib实现数据可视化

Matplotlib是Python中应用较为广泛的绘图工具之一,首次发布于2007年。它在函数设计上参考了MATLAB,因此名字以"Mat"开头,中间的"plot"代表绘图功能,结尾的"lib"表示它是一个集合。Matplotlib支持众多图形的绘制

Matplotlib绘图流程

  1. 准备数据
  2. 添加内容
  3. 绘制图形
  4. 保存/显示

一、折线图

1、实现AQI走势折线图

  1.  import matplotlib.pyplot as plt
  2.  import numpy as np
  3.  ​
  4.  plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式
  5.  plt.rcParams['axes.unicode_minus'] = False
  6.  # 1、准备数据
  7.  data = np.loadtxt('../数据集/aqi_new.csv', delimiter=',', skiprows=1)
  8.  x = data[:31, 2]  # 日期
  9.  y = data[:31, -1]  # AQI
  10.  # 2、添加内容
  11.  plt.title("2017年1月份AQI走势图")
  12.  plt.xlabel("日期")
  13.  plt.ylabel("AQI的值")
  14.  x_label = [str(int(i)) for i in x]  # 设置x轴名称
  15.  plt.xticks(x, x_label)  # 设置x轴对应的刻度名称
  16.  # 3、绘制图形
  17.  plt.plot(x,y,c='red')
  18.  # 4、显示图形
  19.  plt.show()

常用标签和图形设置函数:

函数名描述
plt.title("标题内容")添加标题,可以指定标题名称、位置、颜色、字体大小
plt.xlabel("名称")添加X轴名称
plt.ylabel("名称")添加Y轴名称
plt.xlim(left,right)指定当前图形X轴的范围,即确定一个数值区间
plt.ylim(left,right)指定当前图形Y轴的范围,即确定一个数值区间
plt.xticks(ticks,labels,rotation)获取或设置X轴的当前刻度位置和标签。ticks刻度值,列表型。labels:放置在给定刻度线位置的标签。rotation:倾斜角度
plt.yticks(ticks,labels)获取或设置Y轴的当前刻度位置和标签
plt.legend(title,loc)显示 图例。title:图例添加标题,列表型。loc:图例的位置,可以设置为'beast','upper right','upper left','lower left','lower right','right','center left','center right','lower center','upper center','center'
plt.grid()显示网格线
plt.savefig()保存为图片

2、图形的优化和美化

plot()函数的常用参数:

 plot(*args, scalex=True, scaley=True, data=None, **kwargs)
参数描述
*args一个可变位置参数
**kwargs一个可变长关键字参数。下面的x、y、fmt、c/color都属于可变长参数
x,yX轴和Y轴对应的数据。数组或列表
fmt一个格式字符串
c/color设置颜色
w设置线宽

fmt是一种格式字符串,由颜色、标记和线型三部分组成:

 fmt = '[color][market][line]'

常用颜色符号

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

常用标记符号

字符描述字符描述字符描述字符描述
'.''4'右箭头'H'六边形2'_'标记线
','像素's'正方形'+'加号'v'下三角
'o'圆圈'p'五边形'x'X号'^'上三角
'1'下箭头'P'加号'D'菱形'<'左三角
'2'上箭头'*'星号'd'小菱形'>'右三角
'3'左箭头'h'六边形1'|'垂直线

常用线型符号

字符描述字符描述
'-'实线'-.'点画线
'--'长虚线':'短虚线
  1.  # 红色长虚线,数据使用星号标记:
  2.  plt.plot(x,y,"m--*")
  3.  ​
  4.  # 黑色点画线,数据使用五边形标记:
  5.  plt.plot(x,y,"k-.D")
  6.  ​
  7.  # 蓝色短虚线,无数据标记
  8.  plt.plot(x,y,"b:") # 颜色,线型和标记都是可选项

3、添加注释

使用matplotlib.pyplot.annotate()函数可实现添加注释:

 matplotlib.pyplot.annotate(text, xy, *args,**kwargs)

annotate()函数常用参数:

参数描述
text注释的文本,字符串型
xy要注释的点,元组型,(x轴,y轴)
xytext注释文本所在的位置,元组型,(x轴,y 轴)
arrowprops设置在xy和xytext之间绘制箭头的样式,可选,字典型,可设置以下特征:width:箭头宽度。headwidth:箭头底部宽度。headlength:箭头长度。facecolor:填充颜色。edgecolor:边框颜色。
  1.  # 使用箭头标注最小值所在位置:
  2.  index = np.argmin(y) # 获取y中最小值所对应的索引
  3.  plt.annotate(text='最小值', # 注释的文本
  4.               xy=(x[index], y[index]),
  5.               xytext=(x[index], y[index] + 50),
  6.               color='red', # 文字颜色
  7.               arrowprops=dict(facecolor='g', # 填充颜色
  8.                               headlength=10, # 箭头长度
  9.                               headwidth=10, # 箭头底部宽度
  10.                               width=2, # 箭头宽度
  11.                               edgecolor='g', # 边框颜色
  12.                               )
  13.               )

如果只是设置注释文本,可以使用matplotlib.pylot.text()函数实现:

 matplotlib.pylot.text(x, y, s, fontdict=None, **kwargs)

text()函数的常用参数:

参数描述
x,y放置文本的位置
s文本内容
color文本颜色
fontdict设置文字属性,字典型。设置的属性主要有以下几种:fontsize:文字大小。fontstyle:文字样式,可设置为'normal','italic','oblique'。fontfamily:字体,可设为字体名称、'serif','sans-serif','cursive','fantasy','monospace'。alpha透明度,0~1的小数。rotation:文字的旋转角度,可设为数值、'vertical','horizontal'
  1.  plt.text(12,350,"这是通过text设置的文字",
  2.           color='red',
  3.           fontdict={
  4.               "fontsize":15, # 文字大小
  5.               "fontfamily":"sans-serif", # 字体
  6.               "alpha":0.5 # 透明度
  7.               "rotation":15 # 倾斜15度
  8.           })

二、条形图

1、条形图

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. # 设置中文格式
  4. plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文格式
  5. plt.rcParams['axes.unicode_minus'] = False
  6. # 1、读取数据
  7. data = np.loadtxt('../数据集/aqi_new.csv',delimiter=',',dtype=float,skiprows=1)
  8. x = np.arange(1,21) # 日期1-22
  9. y = data[:20,3] # PM2.5
  10. # 2、添加内容
  11. plt.title("2017年1月份(前20天)AQI走势图") # 设置标题
  12. plt.xlabel("日期") # 设置X轴名称
  13. plt.ylabel("PM2.5的值") # 设置Y轴名称
  14. # 3、绘制图形
  15. x_label = [str(int(i)) for i in x] # 设置x轴刻度标签
  16. plt.bar(x,y, # X,Y轴坐标值
  17. facecolor="g", # 条形框的填充色
  18. edgecolor="b", # 条形框的边框色
  19. align="center", # 条形框与X轴刻度的对齐方式
  20. tick_label=x_label, # 显示在X轴刻度上的文字
  21. alpha=0.6 # 透明度
  22. )
  23. # 4、显示图形
  24. plt.show()

matplotlib.pyplot.bar()函数可以实现条形图的绘制:

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center',data=None, **kwargs)

bar()函数的常用参数:

参数描述
x,heightX轴和Y轴对应的数据
width条形框的宽度,默认值为0.8
align设置条形框与刻度线的对齐方式,默认为'center'。'center':条形图中央与刻度线对齐。'edge':条形图左边缘与刻度线对齐
facecolor填充颜色
edgecolor边框颜色
tick_label设置与X轴刻度对应的文字,默认使用数字标签

2、堆叠条形图

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. # 设置中文格式
  4. plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文格式
  5. plt.rcParams['axes.unicode_minus'] = False
  6. # 1、读取数据
  7. data = np.loadtxt('../数据集/aqi_new.csv',delimiter=',',dtype=float,skiprows=1)
  8. x = np.arange(1,21) # 日期1-22
  9. pm25_1 = data[:20,3] # 1月份PM2.5
  10. pm25_2 = data[32:52,3] # 2月份PM2.5
  11. # 2、添加内容
  12. plt.title("2017年1月份和2月份前20天PM2.5比较") # 设置标题
  13. plt.xlabel("日期") # 设置X轴名称
  14. plt.ylabel("PM2.5的值") # 设置Y轴名称
  15. x_label = [str(int(i)) for i in x] # 设置x轴刻度标签
  16. plt.xticks(x,x_label,rotation=45) # 设置X轴的位置、刻度线和倾斜度
  17. # 3、绘制图形
  18. plt.bar(x,pm25_1,color='r',alpha=0.6)
  19. plt.bar(x,pm25_2,color='g',alpha=0.6)
  20. plt.legend(['1月份','2月份'])
  21. # 4、展示图形
  22. plt.show()

需要注意的是,plt.legend()一定要在绘制图形代码的后面,否则无法显示

3、并排条形图

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. # 设置中文格式
  4. plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文格式
  5. plt.rcParams['axes.unicode_minus'] = False
  6. # 1、读取数据
  7. data = np.loadtxt('../数据集/aqi_new.csv',delimiter=',',dtype=float,skiprows=1)
  8. bw = 0.3 # 设置条形框的宽度
  9. x=np.arange(1,21) # 日期1-20
  10. x2=x+bw # 设置PM10的条形图的位置
  11. pm25 = data[:20,3] # 1月份PM2.5
  12. pm10 = data[:20,4] # 1月份PM10
  13. # 2、添加内容
  14. plt.title("2017年1月份前20天PM2.5和PM10比较") # 设置标题
  15. plt.xlabel("日期") # 设置X轴名称
  16. plt.ylabel("PM2.5或PM10的值") # 设置Y轴名称
  17. x_label = [str(int(i)) for i in x] # 设置x轴刻度标签
  18. plt.xticks(x+bw/2,x_label,rotation=45) # 设置x轴刻度和刻度标签
  19. # 3、绘制图形
  20. plt.bar(x,pm25,color='r',width=bw)
  21. plt.bar(x2,pm10,color='g',width=bw)
  22. plt.legend(['PM2.5','PM10'])
  23. # 4、展示图形
  24. plt.show()

三、散点图

scatter()函数实现散点图:

scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,vmin=None, vmax=None, alpha=None, linewidths=None, *,edgecolors=None, plotnonfinite=False, data=None, **kwargs)

scatter()函数的常用参数:

参数描述
x,yX轴和Y轴对应的数据
s指定点的大小
c设置颜色
market绘制的点的形状
alpha点的透明度,取值为0-1的小数

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. # 设置中文格式
  4. plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文格式
  5. plt.rcParams['axes.unicode_minus'] = False
  6. # 准备数据
  7. data = np.loadtxt('../数据集/aqi_new.csv', delimiter=',', skiprows=1)
  8. # 1、准备数据
  9. aqi = data[:366,-1]
  10. pm25 = data[:366,3]
  11. pm10 = data[:366,4]
  12. # 2。添加内容
  13. plt.title("2017年PM2.5、PM10与AQI关系散点图")
  14. plt.xlabel("各指标值")
  15. plt.ylabel("AQI的值")
  16. # 3、绘制图形
  17. plt.scatter(pm25,aqi,c='r',marker='*')
  18. plt.scatter(pm10,aqi,c='g',marker='o')
  19. plt.legend(['PM2.5','PM10'])
  20. # 4、显示图形
  21. plt.show()

四、子图

子图是将画布切割为多个网格区域,每个区域独立展示图形的格式。子图可以同时展示多个图形,并能清晰、直观地比较图形之间的差异。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. # 设置中文格式
  4. plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文格式
  5. plt.rcParams['axes.unicode_minus'] = False
  6. # 1、准备数据
  7. data = np.loadtxt('../数据集/aqi_new.csv', delimiter=',', skiprows=1)
  8. aqi = data[:200, -1]
  9. pm25 = data[:200, 3]
  10. pm10 = data[:200, 4]
  11. SO2 = data[:200, 5]
  12. NO2 = data[:200, 6]
  13. CO = data[:200, 7]
  14. O3 = data[:200, 8]
  15. # 2、绘制子图
  16. plt.figure(figsize=(12, 10)) # 创建图形,figsize用于设置图形宽和高,单位为英寸
  17. # 子图1
  18. plt.subplot(221) # 子图位置在2*2网格中的第一格
  19. plt.title("PM2.5、PM10与AQI关系散点图")
  20. plt.scatter(pm25,aqi,c='r',marker='*')
  21. plt.scatter(pm10,aqi,c='g',marker='o')
  22. plt.legend(['PM2.5','PM10'])
  23. # 子图2
  24. plt.subplot(222)
  25. plt.title("SO2、NO2与AQI关系散点图")
  26. plt.scatter(SO2,aqi,c='r',marker='*')
  27. plt.scatter(NO2,aqi,c='g',marker='o')
  28. plt.legend(['SO2','NO2'])
  29. # 子图3
  30. plt.subplot(2,2,3)
  31. plt.title("CO与AQI关系散点图")
  32. plt.scatter(CO,aqi,c='r',marker='*')
  33. # 子图4
  34. plt.subplot(2,2,4)
  35. plt.title("O3与AQI关系散点图")
  36. plt.scatter(O3,aqi,c='r',marker='*')
  37. plt.show()

五、饼图

使用matplotlib.pyplot.pie()函数实现饼图的绘制:

  1. matplotlib.pyplot.pie(
  2. x, explode=None, labels=None, colors=None, autopct=None,
  3. pctdistance=0.6, shadow=False, labeldistance=1.1,
  4. startangle=0, radius=1, counterclock=True, wedgeprops=None,
  5. textprops=None, center=(0, 0), frame=False,
  6. rotatelabels=False, *, normalize=True, hatch=None, data=None)

pie()函数的常用参数

参数描述
x绘制“饼”的数据,array型
explode脱离圆心的幅度,取值范围0-1,1表示完全脱离
labels指定每一项的名称,array型
colors指定每一项的颜色,string型或array型,默认为None
autopct数值的显示方式,string型,默认为None
shadow是否显示阴影效果,默认为False
startangle逆时针的旋转角度,float型,默认为0
radius指定饼图的半径,float型,默认值为1

 

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. # 设置中文格式
  4. plt.rcParams['font.sans-serif'] = ['SimHei']
  5. plt.rcParams['axes.unicode_minus'] = False
  6. # 准备数据
  7. data = np.loadtxt('../数据集/aqi_new.csv', delimiter=',', skiprows=1)
  8. aqi = data[:366,-1]
  9. l1 = len(aqi[aqi<=50]) # 优
  10. l2 = len(aqi[np.logical_and(aqi>50,aqi<=100)]) # 良
  11. l3 = len(aqi[np.logical_and(aqi>100,aqi<=150)]) # 轻度污染
  12. l4 = len(aqi[np.logical_and(aqi>150,aqi<=200)]) # 中度污染
  13. l5 = len(aqi[np.logical_and(aqi>200,aqi<=300)]) # 重度污染
  14. l6 = len(aqi[aqi>300]) # 严重污染
  15. # 绘制图形
  16. plt.title('2017年空气质量占比图')
  17. plt.pie(
  18. x=[l1,l2,l3,l4,l5,l6],
  19. explode=[0,0,0,0,0,0.1],
  20. labels=['优','良','轻度污染','中度污染','重度污染','严重污染'],
  21. colors=['b','g','r','c','m','y'],
  22. autopct="%1.1f%%",
  23. shadow=True
  24. )
  25. plt.show()
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/408992
推荐阅读
相关标签
  

闽ICP备14008679号