前言
数据可视化是一种通过图表和图形等可视化工具将数据转化为易于理解和解释的形式的过程。它可以帮助我们发现数据集中的模式、趋势和关系,并从中获取洞察力。常用的数据可视化方法包括柱状图、直方图、饼图、箱图、热图、散点图和线状图等。
数据可视化的好处有很多。首先,它可以帮助我们更好地理解数据,从而更准确地分析和解读数据。其次,数据可视化可以帮助我们快速发现数据中的异常值和趋势,提供及时的决策支持。此外,通过数据可视化,我们可以将复杂的数据和信息转化为易于理解的图形或图表,使非专业人员也能轻松理解数据。
绘制图表
使用matplotlib绘制图表
matplotlib库仅需开发人员编写几行代码即可绘制一个图表。下面结合面向对象的方式使用matplotlib库绘制一个简单的图表,示例代码如下:
导入模块
import numpy as np
import matplotlib.pyplot as plt
准备数据
data = np.array([1, 2, 3, 4, 5])
创建代表画布的Figure类的对象fig
fig = plt.figure()
给画布fig上添加坐标系风格的绘图区域ax
ax = fig.add_subplot(111)
绘制图表
ax.plot(data)
展示图表
plt.show()
运行结果如下
在网页搜索matplotlib,就跳出官网,里面有最新的函数用法。
绘制折线图
使用plot()绘制折线图
使用pyplot的plot()函数可以快速绘制折线图。plot()函数的语法格式如下:
plot(x, y, fmt, scalex = True, scaley = True, data = None, label = None, *args, **kwargs)
函数含义如下:
x:表示x轴的数据。
y:表示y轴的数据。
fmt:表示快速设置线条样式的格式字符串。
label:表示应用于图例的标签文本。
plot()函数会返回一个包含Lin2D类对象(代表线条)的列表。
1)可以调用plot()函数来绘制多个线条的折线图,代码如下:
plt.plot(x1, y1)
plt.plot(x2, y2)
2)调用plot()函数时可以传入一个二维数组来绘制多个线条的折线图,代码如下:
arr = np.array([1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12])
plt.plot(arr[0], arr[1:]
3)调用plot()函数时传入多组数据来绘制具有多个线条的折线图,代码如下:
plt.plot(x1, y1, x2, y2)
下面用实例来绘制未来15天最高气温和最低气温折线图
import matplotlib.pyplot as plt
import numpy as np #导入模块
x = np.arange(4, 19) #x轴数据
y_max = np.array([32, 33, 34, 34, 33, 31, 30, 29, 30, 29, 26, 23, 21, 25, 31]) #导入y轴数据
y_min = np.array([19, 19, 20, 22, 22, 21, 22, 16, 18, 18, 17, 14, 15, 16, 16])
fig = plt.figure() #创建类
ax = fig.add_subplot() #给画布fig上添加坐标系风格的绘图区域ax
ax.plot(x, y_max) #绘制气温最高气温线条
ax.plot(x, y_min) #绘制气温最低气温线条
plt.show() #展示图表
运行结果如下:
当然,我们还可以在此基础上绘制平均气温,并设置线条颜色为红色,样式为虚线,代码如下:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(4, 19)
y_max = np.array([32, 33, 34, 34, 33, 31, 30, 29, 30, 29, 26, 23, 21, 25, 31])
y_min = np.array([19, 19, 20, 22, 22, 21, 22, 16, 18, 18, 17, 14, 15, 16, 16])
y_mea = (y_max+y_min)/2.0 #将最高气温和最低气温相加取平均值
fig = plt.figure() #创建类
ax = fig.add_subplot() #给画布fig上添加坐标系风格的绘图区域ax
ax.plot(x, y_max)
ax.plot(x, y_min)
ax.plot(x, y_mea, 'r--') #绘制平均值气温,并设置颜色为红色,样式为虚线
plt.show()
运行结果如下:
绘制柱形图或堆积柱形图
使用bar()绘制柱形图或堆积柱形图
使用pyplot的bar()函数可以快速绘制柱形图或堆积柱形图。bar()函数的语法格式如下:
bar(x, heigt, width = 0.8, bottom = None, align = 'center',
data = None, tick_label = None, xerr = None, yerr = None,
error_kw = None, **kwargs)
bar()函数常用参数含义如下:
x:表示柱形的x坐标值。
heigh:表示柱形的高度。
width:表示柱形的宽度,默认为0.8。
bottom:表示柱形底部的y坐标值,默认为0。
align:表示柱形的对齐方式。
tick_label:表示柱形对应的刻度标签。
xerr,yerr:若未设为None,则需要为柱形图添加水平/垂直误差棒。
error_kw:表示误差棒的属性字典,字典的键对于errorbar()函数的关键字参数。
下面用bar()函数绘制柱形图,代码如下:
import numpy as np
import matplotlib.pyplot as plt #导入模块
x = np.arange(5) #设置x轴的坐标值
y1 = np.array([10, 8, 7, 11, 13]) #添加数据
fig = plt.figure() #创建类
ax = fig.add_subplot(111) #在画布fig上添加坐标系风格的绘图区域ax
bar_width = 0.3 #柱形的高度
ax.bar(x, y1, tick_label = ['a', 'b', 'c', 'd', 'e'], width = bar_width) #绘制柱形图
plt.show() #展示柱形图
运行结果如下:
还可以绘制多组柱形的柱形图。代码如下:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(5)
y1 = np.array([10, 8, 7, 11, 13])
y2 = np.array([9, 6, 5, 10, 12]) #添加第二组数据
fig = plt.figure() #创建类
ax = fig.add_subplot() #给画布fig上添加坐标系风格的绘图区域ax
bar_width = 0.3
ax.bar(x, y1, tick_label = ['a', 'b', 'c', 'd', 'e'], width = bar_width)
ax.bar(x+bar_width, y2, width=bar_width) #加上第一组的宽度,并绘制柱形图
plt.show()
运行结果如下:
可以将第二组数据堆积在第一组上方,代码如下:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(5)
y1 = np.array([10, 8, 7, 11, 13])
y2 = np.array([9, 6, 5, 10, 12])
fig = plt.figure() #创建类
ax = fig.add_subplot() #给画布fig上添加坐标系风格的绘图区域ax
bar_width = 0.3
ax.bar(x, y1, tick_label = ['a', 'b', 'c', 'd', 'e'], width = bar_width)
ax.bar(x, y2, bottom=y1, width=bar_width) #用bottom参数传值的方式控制柱形的y值,使绘制的柱形位于先绘制的柱形上方
plt.show()
运行结果如下:
当数据不稳定时,我们可以添加误差棒来表示,代码如下:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(5)
y1 = np.array([10, 8, 7, 11, 13])
y2 = np.array([9, 6, 5, 10, 12])
bar_width = 0.3
fig = plt.figure() #创建类
ax = fig.add_subplot() #给画布fig上添加坐标系风格的绘图区域ax
error = [2, 1, 2.5, 2, 1.5] #偏差数据
ax.bar(x, y1, tick_label = ['a', 'b', 'c', 'd', 'e'], width = bar_width)
ax.bar(x, y2, bottom=y1, width=bar_width, yerr=error) #用yerr参数传值的方式添加误差棒
plt.show()
运行结果如下:
以上是使用面向对象的方式绘制折线图和柱形图。