引言
在数据分析和数据建模中,数据的可视化是非常重要的环节,它能帮助我们更好地理解数据、找出数据的特点和规律、进行更准确的数据分析和决策。python中的matplotlib包中的plot函数是一个非常强大的数据可视化工具,它能够帮助我们进行各种各样的数据可视化操作,如散点图、折线图、柱状图、箱线图等等。
正文
1、plot函数基础
plot函数是matplotlib中最常用的函数之一,它可以帮助我们生成各种各样的图形。plot函数最基本的用法是:给定X轴和Y轴上的点的坐标,可以用plot函数绘制出这些点组成的图像。
import matplotlib.pyplot as plt import numpy as np #生成数据 x = np.linspace(0,10,100) y = np.sin(x) #绘图 plt.plot(x,y) plt.show()
在这个例子中,我们使用了numpy来生成了100个等距的数据点,然后计算出了它们的正弦值。接着,我们使用plot函数把它们绘制成曲线,并使用show函数来显示出来。执行代码,就会得到一张正弦曲线的图像。
2、散点图和折线图
plot函数不仅可以绘制折线图,还可以绘制散点图。相比于折线图,散点图更能够突出数据点之间的离散程度。
下面是一个简单的散点图绘制代码的例子:
import matplotlib.pyplot as plt import numpy as np #生成数据 x = np.random.rand(50) y = np.random.rand(50) colors = np.random.rand(50) sizes = 1000 * np.random.rand(50) #绘图 plt.scatter(x, y, c=colors, s=sizes, alpha=0.5) plt.show()
在这个例子中,我们使用numpy生成了50个随机的X轴坐标和Y轴坐标,并使用了两个随机变量来控制散点的颜色和大小。scatter函数用来绘制散点图,其中c参数控制散点的颜色,s参数控制散点的大小,alpha参数控制散点的透明度。执行代码,就会得到一张有50个随机散点的图像。
折线图和散点图可以同时绘制到同一幅图上,只需要在绘制折线图时,把plot函数替换为scatter函数即可。
import matplotlib.pyplot as plt import numpy as np #生成数据 x = np.linspace(0, 10, 100) y = np.sin(x) #绘图 plt.plot(x, y, label='sin(x)') plt.scatter(x[::10], y[::10], c='r', s=50, label='sampled points') plt.legend() plt.show()
在这个例子中,我们首先使用plot函数绘制出了sin(x)的曲线,然后使用scatter函数把曲线上每隔10个点的位置处的点绘制成红色的散点。legend函数用来给图中的曲线和散点添加图例。执行代码,就会得到一张既有折线图又有散点图的图像。
3、多子图布局
在数据分析中,有时需要对多个不同的子集或者数据集进行绘图展示,而用一个图形中绘制多个图时,如果用传统的subplot实现,稍微复杂点的图形就会非常难以绘制。在这种情况下,我们可以使用subplot2grid来实现更加灵活的子图布局。
import matplotlib.pyplot as plt import numpy as np #生成数据 x1 = np.linspace(0, 5, 100) y1 = np.sin(x1) x2 = np.linspace(0, 5, 100) y2 = np.cos(x2) #绘图 fig = plt.figure(figsize=(8, 6)) ax1 = plt.subplot2grid((3, 3), (0, 0), rowspan=2, colspan=2) ax1.plot(x1, y1, 'r-') ax1.set_title('sin') ax2 = plt.subplot2grid((3, 3), (0, 2), rowspan=2, colspan=1) ax2.plot(x2, y2, 'g-') ax2.set_title('cos') ax3 = plt.subplot2grid((3, 3), (2, 0), rowspan=1, colspan=3) ax3.plot(x1, y1, 'b-', x2, y2, 'y-') ax3.set_title('sin and cos') plt.tight_layout() plt.show()
在这个例子中,我们首先生成了两组X轴和Y轴上的点的坐标,分别对应正弦曲线和余弦曲线。然后,我们使用subplot2grid函数来实现三幅子图的布局。第一个参数代表整个图形的布局,第二个参数代表当前子图在整个图形中的位置,第三个参数代表当前子图的大小。最后,我们分别在三幅子图中绘制了sin、cos以及sin和cos的曲线,并使用set_title函数来给每个子图加上了标题。tight_layout函数用来调整子图之间的间距。执行代码,就会得到一张包含三幅子图的图像。
4、柱状图与堆叠图
柱状图是对于不同类别之间的比较和量值之间的比较非常有用的一种数据可视化方式,matplotlib中的bar函数可以用来绘制柱状图。堆叠图则是用来显示多个变量在总和上的相对贡献度,与柱状图相比,堆叠图在视觉效果上会更充分地体现出各个变量之间的差异性。
下面我们分别通过两个例子来演示如何绘制柱状图和堆叠图:
import matplotlib.pyplot as plt import numpy as np #生成数据 data = [10, 20, 30, 40, 50] labels = ['this', 'that', 'other', 'stuff', 'things'] #绘图 plt.bar(np.arange(len(data)), data, align='center') plt.xticks(np.arange(len(data)), labels) plt.show()
在这个例子中,我们首先生成了一个包含5个元素的数据列表,然后使用bar函数把这些数据绘制成柱状图,并使用xticks函数来给每根柱子加上标签。执行代码,就会得到一张柱状图的图像。
import matplotlib.pyplot as plt import numpy as np #生成数据 N = 5 menMeans = (20, 35, 30, 35, 27) womenMeans = (25, 32, 34, 20, 25) ind = np.arange(N) width = 0.35 #绘图 plt.bar(ind, menMeans, width, label='Men') plt.bar(ind, womenMeans, width, bottom=menMeans, label='Women') plt.ylabel('Scores') plt.title('Scores by group and gender') plt.xticks(ind, ('Group1', 'Group2', 'Group3', 'Group4', 'Group5')) plt.legend(loc='lower center') plt.show()
在这个例子中,我们首先生成了男性和女性的得分列表,其中包含了5个分组,然后使用bar函数把这些数据绘制成堆叠图。其中的bottom参数控制着女性柱子绘制时的起点,即女性柱子的高度都是基于男性柱子的高度的。执行代码,就会得到一张堆叠图的图像。
5、箱线图
箱线图是一种常用的数据可视化工具,它可以用来展示一组数据的分布情况,包括中位数、四分位数、最大值和最小值等。Matplotlib中的boxplot函数可以用来绘制箱线图。下面是一个绘制箱线图的例子:
import matplotlib.pyplot as plt import numpy as np #生成数据 data = [np.random.normal(0, std, 100) for std in range(1, 4)] #绘图 fig = plt.figure(figsize=(8,6)) ax = fig.add_subplot(111) bp = ax.boxplot(data) ax.set_xticklabels(['x1', 'x2', 'x3']) plt.show()
在这个例子中,我们首先使用numpy生成三组数据,并使用boxplot函数把它们绘制成一个箱线图。add_subplot函数返回一个AxesSubplot对象,用来在Figure对象上添加一个子图。xticklabels函数用来给X轴坐标加上对应的标签。执行代码,就会得到一张箱线图的图像。
总结
通过上面的几个例子,我们学习了如何使用plot函数进行数据可视化,其中包括了折线图、散点图、子图布局、柱状图、堆叠图和箱线图等几种非常常用的可视化方式,特别是plot函数最常用的用法,希望可以对读者有所帮助。