Day 07 : 资料视觉化 Matplotlib

昨天介绍的资料分析後,相信大家对於资料分析都能轻松上手。把特如果要把一堆数据和资料给你的老板和顾客看,可能就比较不适合。一张图胜过於千言万语,你需要是将数据进行视觉化,让别人一目了然。

Mathplotlib 是非常强大的视觉化工具,建立於 numpy 套件处理资料视觉化的套件。我们就来看看可以画哪些图吧!

基本技巧

安装与使用

pip install matplotlib
import matplotlib.pyplot as plt

设定样式

采用经典样式

plt.style.use('classic')

notebook 设定

# 互动式图片镶嵌在 notebook
%matplotlib notebook
# 静态的图片镶嵌在 notebook
%matplotlib inline

画一张图

import matplotlib.pyplot as plt

x = [ i**2 for i in range(10)]
plt.plot(x)
plt.show()

图片存档

import matplotlib.pyplot as plt

x = [ i**2 for i in range(10)]
plt.plot(x)
plt.savefig('demo.jpg')

标题

  • title:大标题
  • xlabel:x 座标说明
  • ylabel:y 座标说明
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = plt.axes()
x = np.linspace(-5, 5, 1000)
ax.plot(x, np.sin(x))
plt.title('Sin')
plt.xlabel('x')
plt.ylabel('y')

换颜色

可以直接在color这个参数修改文字,详细可以参考

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = plt.axes()
x = np.linspace(-5, 5, 1000)
ax.plot(x, np.sin(x), color='red')
plt.title('Sin')
plt.xlabel('x')
plt.ylabel('y')

座标轴刻度设定

  • tick_params 可以调整做座标轴上刻度的参数
    • axis:x、y、both
    • labelsize:刻度文字大小
    • color:刻度颜色
  • plt.xticks 或 plt.yticks 可以随意显示要的刻度
  • plt.xlim 、 plt.ylim 更改座标轴的显示范围
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = plt.axes()
x = np.linspace(-5, 5, 1000)
ax.plot(x, np.sin(x))
plt.title('Sin')
plt.xlabel('x')
plt.ylabel('y')
# 调整 x 的刻度
plt.xticks([-3, -2, 0, 2, 5])
# 调整 x 的范围
plt.xlim(-10, 10) 
plt.tick_params(axis='x', labelsize=12, color='r')

建立图例

记得 plt.plot 的回传值要使用「,」才能让 lengend 正确呼叫成功哦!
loc 的参数可以是 best、upper right、center left、lower left 等等(可自己组组看英文)

import matplotlib.pyplot as plt

stock_a = [ 10, 59, 70, 61, 80]
stock_b = [ 67, 83, 37, 32, 48]
stock_c = [ 43, 23, 84, 75, 37]

month = [ 4, 5, 6, 7, 8]
plt.xticks(month)
line_a, = plt.plot(month, stock_a, '-o', label='A')
line_b, = plt.plot(month, stock_b, '-*', label='B')
line_c, = plt.plot(month, stock_c, '-^', label='C')
plt.legend(handles=[line_a, line_b, line_c], loc='lower right')
plt.title('Stock', fontsize=16)
plt.xlabel('Month', fontsize=16)
plt.ylabel('the price of stock', fontsize=16)
plt.show()

建立子图

当然一张图也可以塞很多不同种类的图片,透过 subplot 可以各种摆图案哦!

plt.subplot(n_rows, n_columns, n_subplot)
  • n_rows:列数
  • n_columns:行数
  • n_subplot:第n个图案
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-5, 5, 1000)

plt.figure(figsize=(20, 5))
plt.subplot(1, 3, 1)
plt.plot(x, np.sin(x))
plt.subplot(1, 3, 2)
plt.plot(x, np.cos(x))
plt.subplot(1, 3, 3)
plt.plot(x, np.tan(x))

画各种的图

散布图

其实把 np.linspace 第三个参数值稍为调整低一点,只有呈现 20 个点,那就可以画散布图罗

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = plt.axes()
x = np.linspace(-5, 5, 20)
y = np.sin(x)
plt.plot(x, y, 'o')
# plt.scatter(x, y)
plt.title('Scatter Plot')
plt.xlabel('x')
plt.ylabel('y')


plt.plot 和 plt.scatter 都可以画出这个图。而 plt.scatter 可以针对每个点的大小或颜色作设定,在资料量小的时候没有差别,但倘若要绘制的资料点超过数千个时候,plt.plot 采用复制的方式、plt.scatter是个别建立,效能上 plt.plot 会胜过 plt.scatter。

直方图

import matplotlib.pyplot as plt
import numpy as np

# 随机生成 1000个点(normal distribution)
d = np.random.randn(1000)
plt.hist(d)

长条图

若想要每个长条加上数字,可以使用 plt.text 搭配回圈

import matplotlib.pyplot as plt
import numpy as np

fruits_num = [120, 320, 275]
ind = np.arange(len(fruits_num))


fig, ax = plt.subplots(figsize = (10,5))
plt.xticks(ind, ['banana', 'apple', 'lemon'])
plt.ylim(0, 500)
ax.bar(ind, fruits_num, width=0.4)

for index, data in enumerate(fruits_num):
    plt.text(x=index , y =data+30 , s=data , fontdict=dict(fontsize=20))
plt.show()


<<:  day 4 I'm your father, coroutine父子继承关系

>>:  反射光

[Day 12] 决策树 (Decision tree)

决策树 (Decision tree) 今日学习目标 决策树演算法介绍 决策树如何生成? 如何处理分...

Day 16 - 用 canvas 做射击小游戏

import { useEffect, useState, useRef } from "...

Eloquent ORM - Model 资料转换

现在我们可以用各种方法将资料读取出来,不过通常读取後还要将资料做一些转换才适用,举个例子像是 boo...

#28 Click! Serve! Desktop

昨天已经把大部分的 GUI 弄完了,之前也已经写好了服务器的程序,今天我们把两边拼起来吧! 搬移 s...

【DAY 10】SharePoint 的应用五花八门,什麽最适合你?(下)

昨天我们说明的 SharePoint 网站基本架构主要重点有: 设定架设网站的目的 依照目的规划内容...