作者:雷蕾
数据可视化指的是通过可视化表示来探索数据,它与数据分析紧密相关。
数据分析指的是使用代码来探索数据集的规律和关联。
本文主要讲解如何使用Pyhon最流行的工具之一Matplotlib来绘制折线图:
(一)安装Matplotlib
要使用Matplotlib来生成图表,为此需要使用pip包来对Matplotlib进行安装,执行命令如下:
为避免网络问题而导致下载并安装错误,可执行如下命令:
除此之外,小编在使用Matplotlib时出现错误,问题就在于numpy的版本,因此需要卸载原先的numpy1.19.4版本,重新安装numpy1.19.3版本,具体操作可执行如下命令:
卸载:
重装:
(二)绘制简单折线图
(1)先试着使用Matplotlib绘制一个最简单的折线图,我们使用平方数系列[1,4,9,16,25]来绘制这个图表:
import matplotlib.pyplot as plt
squares=[1,4,9,16,25]
fig,ax=plt.subplots()
ax.plot(squares)
plt.show()
在示例中,首先是导入模块pyplot ,并指定别名为plt,这是为了之后写代码的简洁,后面不需要反复输入pyplot,之后创建了一个名为squares的列表,用于存储制作图表的数据;
代码行fig,ax=plt.subplots()是调用函数subplots(),这个函数可在一张图片中绘制一个或多个图表,变量fig表示整张图片,变量ax表示图片中的各个图表,大多数情况下都需要使用它;
代码行ax.plot(squares)是调用方法plot(),它尝试根据给定的数据以有意义的方式绘制图表;
代码行plt.show()是打开Matplotlib查看器并显示绘制的图表。
运行代码结果展示:
(2)修改标签文字和线条粗细
在使用Matplotlib绘制图表时,可改变标签文字、线条等的大小来改善图表的可读性:
#修改标签文字和线条粗细
import matplotlib.pyplot as plt
squares=[1,4,9,16,25]
fig,ax=plt.subplots()
#绘制线条粗细
ax.plot(squares,linewidth=3)
#设置图表标题并给坐标轴加上标签
ax.set_title("平方数",fontsize=24)
ax.set_xlabel("值",fontsize=14)
ax.set_ylabel("值的平方",fontsize=14)
#设置刻度标记的大小
ax.tick_params(axis='both',labelsize=14)
#显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
#解决负号“-”显示为方块的问题
plt.rcParams['axes.unicode_minus']=False
plt.show()
在示例中,添加绘制了线条粗细、刻度大小以及图表标题以及x轴、y轴的名称;
参数linewidth决定了plot()绘制的图表的线条粗细;
方法**set_title()是给图表指定标题;
方法set_xlabel()和方法set_ylabel()**分别是为x轴、y轴设置坐标轴标题;
方法tick_params()是设置刻度的样式,其中方法中的实参axis='both’将影响x轴和y轴上的刻度,参数labelsize=14主要是将刻度标记的字号设置为14,而参数fontsize是指定图表中各种文字的大小。
运行代码结果展示:
值得注意的是,为了中文标签能够成功绘制,我们需要添加代码行:
#显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
#解决负号“-”显示为方块的问题
plt.rcParams['axes.unicode_minus']=False
(3)校正图形
通过查看上述示例的运行结果所得图片,我们可发现绘制出的图片存在明显的错误:折线图的x坐标轴的点4的平方值为25,这是不可能的!因此我们需要校正这个问题:
#校正图片
#修改标签文字和线条粗细
import matplotlib.pyplot as plt
input_values=[1,2,3,4,5]
squares=[1,4,9,16,25]
plt.style.use('seaborn')
fig,ax=plt.subplots()
#绘制线条粗细
ax.plot(input_values,squares,linewidth=3)
#设置图表标题并给坐标轴加上标签
ax.set_title("平方数",fontsize=24)
ax.set_xlabel("值",fontsize=14)
ax.set_ylabel("值的平方",fontsize=14)
#设置刻度标记的大小
ax.tick_params(axis='both',labelsize=14)
#显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
#解决负号“-”显示为方块的问题
plt.rcParams['axes.unicode_minus']=False
plt.show()
通过向plot()提供输入值和输出值,plot()不需要对输出值的生成方式进行假设,因此最终形成的图形是正确的:
input_values=[1,2,3,4,5]
squares=[1,4,9,16,25]
ax.plot(input_values,squares,linewidth=3)
在示例中我们还添加了一行代码:plt.style.use(‘seaborn’),通过添加此代码行可使用Matplotlib提供了很多已经定义好的样式,比如背景色、网格线、线条粗细、字体、字号等。
运行代码结果展示:
最终我们可以看到图形已经得到校正,5的平方值是25!
(4)自动计算得数据
当要绘制的点尤其多,我们不必手工计算包含坐标点的列表,可用Python循环来完成:
import matplotlib.pyplot as plt
x_values=range(1,1001)
y_values=[x**2 for x in x_values]
plt.style.use('seaborn')
fig,ax=plt.subplots()
ax.scatter(x_values,y_values,s=10)
#设置图表标题并给坐标轴加上标签
ax.set_title("平方数",fontsize=24)
ax.set_xlabel("值",fontsize=14)
ax.set_ylabel("值的平方",fontsize=14)
#设置刻度标记的大小
ax.tick_params(axis='both',which='major',labelsize=14)
#设置每个坐标轴的取值范围
ax.axis([0,1100,0,1100000])
#显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
#解决负号“-”显示为方块的问题
plt.rcParams['axes.unicode_minus']=False
plt.show()
在示例中,创建了一个包含x值的列表,其中包含数1~1000,接下来生成y值的列表解析,它遍历x值(for x in x_values),计算其平方值(x**2),并将结果存储到列表y_values中;
该代码行ax.scatter(x_values,y_values,s=10)表示将输入列表和输出列表传递给scatter(),因为涉及数多,我们将s的值(尺寸)变小;
该代码行ax.axis([0,1100,0,1100000])还使用方法axis()指定了每个坐标轴的取值范围:方法axis()要求提供4个值:x坐标轴和y坐标轴的最小值和最大值。
运行代码结果展示:
(5)颜色映射
使用颜色映射是一系列颜色,从起始颜色到结束颜色,模块pyplot内置了一组颜色映射,要使用这些颜色映射,需要告诉pyplot该如何设置数据集中的每个点的颜色:
import matplotlib.pyplot as plt
x_values=range(1,1001)
y_values=[x**2 for x in x_values]
plt.style.use('seaborn')
fig,ax=plt.subplots()
ax.scatter(x_values,y_values,c=y_values,cmap=plt.cm.Blues,s=10)
#设置图表标题并给坐标轴加上标签
ax.set_title("平方数",fontsize=24)
ax.set_xlabel("值",fontsize=14)
ax.set_ylabel("值的平方",fontsize=14)
#设置刻度标记的大小
ax.tick_params(axis='both',which='major',labelsize=14)
#设置每个坐标轴的取值范围
ax.axis([0,1100,0,1100000])
#显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
#解决负号“-”显示为方块的问题
plt.rcParams['axes.unicode_minus']=False
plt.show()
在示例中,代码行:
ax.scatter(x_values,y_values,c=y_values,cmap=plt.cm.Blues,s=10)
将参数c设置成一个y列表,并使用参数cmap告诉pyplot使用哪个颜色映射,示例中使用了Blue(蓝色)。
运行代码结果展示:
通过查看所得结果的展示,可知在示例中将y值较小的点显示为浅蓝色,将y值较大的点显示为深蓝色。
我们还可以让程序自动将图表保存到文件中,可将调用的代码plt.show()改为:
#自动保存图表
plt.savefig('squares_plot.png',bbox_inchese='tight')
该行代码中,'squares_plot.png’指定要以什么文件名保存图表;
bbox_inchese='tight’指定将图表多余的空白区域裁剪掉,当不需要裁剪掉图表空白区域时可将此代码删掉。