diff --git "a/docs/views/data/2021-11-27-python\346\225\260\346\215\256\345\217\257\350\247\206\345\214\226.md" "b/docs/views/data/2021-11-27-python\346\225\260\346\215\256\345\217\257\350\247\206\345\214\226.md" new file mode 100644 index 00000000..a28975d9 --- /dev/null +++ "b/docs/views/data/2021-11-27-python\346\225\260\346\215\256\345\217\257\350\247\206\345\214\226.md" @@ -0,0 +1,129 @@ +--- +layout: post +title: Python数据可视化 +date: 2021-11-27 +author: SHZ +categories: + - 数据分析部 +tags: + - Matplotlib语法 +--- + +# Matplotlib +Matolotlib是最流行的python底层绘图库,主要是做数据可视化图表。它可以让数据更加直观的呈现,让数据更加客观,具有说服力。 + +## 1.Figure + +在任何绘图之前,需要一个Figure对象,可以理解成我们需要一张画板才能开始绘图。 + +```python +import matplotlib.pyplot as plt +fig = plt.figure() + +``` + +## 2.Axes + +在拥有Figure对象之后,在作画前我们还需要轴,没有轴的话就没有绘图基准,所以需要添加Axes。 + +```python +fig = plt.figure() +ax = fig.add_subplot(111) +ax.set(xlim=[1, 5], ylim=[1, 5], title='An Example Axes', + ylabel='Y-Axis', xlabel='X-Axis') +plt.show() + +``` + +以上代码,在一幅图上添加了一个Axes,然后设置了这个Axes的X轴以及Y轴的取值范围,效果如下 +![捕获.PNG](https://i.loli.net/2021/11/28/3qEarVwiIzxFTCX.png) +代码中的的fig.add_subplot(111)表示添加一个Axes,参数的解释是在画板的第1行第1列的第一个位置生成一个Axes对象来准备作画。也可以通过fig.add_subplot(2, 2, 1)等的方式生成Axes,前面两个参数确定了面板的划分,例如 2, 2会将整个面板划分成 2 * 2 的方格,第三个参数取值范围是 [1, 4] 表示第几个Axes。如下面的例子: + +```python +fig = plt.figure() +ax1 = fig.add_subplot(221) +ax2 = fig.add_subplot(222) +ax3 = fig.add_subplot(224) +``` +效果如下 +![捕获.PNG](https://i.loli.net/2021/11/28/SXEIZoAi24bhpvC.png) + +## 画线 + +plot()函数画出一系列的点,并且用线将它们连接起来。如: + +```python +x = np.linspace(0, np.pi) +y_sin = np.sin(x) +y_cos = np.cos(x) +ax1.plot(x, y_sin) +ax2.plot(x, y_sin) +ax3.plot(x, y_cos) +``` +效果如下 +![捕获.PNG](https://i.loli.net/2021/11/28/R92Ea34PASwKtmf.png) + +## 散点图 +用plt.scatter函数画散点图 + +plt.scatter(x, y, s, c, marker, cmap, norm, alpha, linewidths, edgecolorsl) + +参数说明: + +x: x轴数据 + +y: y轴数据 + +s: 散点大小 + +c: 散点颜色 + +marker: 散点形状 + +cmap: 指定特定颜色图,该参数一般不用,有默认值 + +alpha: 散点的透明度 + +linewidths: 散点边框的宽度 + +edgecolors: 设置散点边框的颜色 +```python +x = np.arange(10) +y = np.random.randn(10) +plt.scatter(x, y, color='red', marker='+') +``` +np.arange函数返回一个有终点和起点的固定步长的排列,一个参数时默认起点为0。 +numpy.random.randn函数从标准正态分布中返回一个或多个样本值。 + +![捕获.PNG](https://i.loli.net/2021/11/28/VlLq69d8NEC5xm4.png) + +## 条形图 + +用ax.bar()函数绘制 + +ax.bar(x, height, width, bottom, align) + +参数说明: + +x:控制条形图的中心(默认)还是左边缘 + +height:标量或标量序列代表条形图的高度 + +width:标量或类数组,可选。条形图的宽度默认为0.8 + +bottom:标量或类数组,可选。条形图的Y坐标,默认为None + +align:{'center', 'edge'}, 可选,默认'center' + +```python +np.random.seed(1) +x = np.arange(5) +y = np.random.randn(5) +fig, axes = plt.subplots(ncols=2, figsize=plt.figaspect(1./2)) +vert_bars = axes[0].bar(x, y, color='lightblue', align='center') +horiz_bars = axes[1].barh(x, y, color='lightblue', align='center') +axes[0].axhline(0, color='gray', linewidth=2) +axes[1].axvline(0, color='gray', linewidth=2) +``` +效果如下 +![捕获.PNG](https://i.loli.net/2021/11/28/vW8qCLiMIcjUduK.png) \ No newline at end of file