Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 129 additions & 0 deletions docs/views/data/2021-11-27-python数据可视化.md
Original file line number Diff line number Diff line change
@@ -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)