Python绘图库Matplotlib入门教程

实操内容来源于:http://qiangbo.space/2018-04-06/matplotlib_l1/


介绍

Matplotlib是一个Python 2D绘图库,它可以在各种平台上运行。 Matplotlib可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。Matplotlib可以用于绘制直方图,饼图,条形图,散点图等。

安装

首先要安装python以及pip工具

win10管理员方式打开cmd

pip install matplotlib

Linux

sudo pip install matplotlib

本次实验环境

  • python==3.6.4
  • matplotlib==2.2.2
  • numpy==1.14.3

多个subplot

主要是用于放置多个同级的绘画窗口

方法一

import matplotlib.pyplot as plt
import numpy as np

# 构造两组数据
data = np.arange(100, 201)
data2 = np.arange(200, 301)

plt.subplot(1, 2, 1)  # 选中1行2列中的第1个绘图区
plt.plot(data)

plt.subplot(1, 2, 2)
plt.plot(data2)
plt.show()  # 开始绘制窗口,可以理解为渲染

方法二

import matplotlib.pyplot as plt
import numpy as np

# 构造两组数据
data = np.arange(100, 201)
data2 = np.arange(200, 301)

fig = plt.figure()  # 创建图形窗口的意思
# 设置布局
ax = fig.add_subplot(121)  # 用一个变量接收1行2列中的第1个绘图区
# ax = fig.add_subplot(1,2,1)  # 这个可以和上面的替换
ax.plot(data)  # 在这个绘图区上作画

ax = fig.add_subplot(122)
ax.plot(data2)
plt.show()

这里写图片描述
竖着放更改subplot的前两个参数位置即可如plt.subplot(1, 2, 1)->plt.subplot(2, 1, 1)
这里写图片描述


线性图

线性图plot简单粗暴,任意两个相邻点之间的连线都是直线段

import matplotlib.pyplot as plt

# 绘制出来两点之间相连都是直线
plt.plot([1, 2, 3,4], [3, 6, 9,12], '-r')  # -是实线,r是红色
plt.plot([1, 2, 3,4], [1, 5, 3,12], ':g')  # :是虚线,g是绿色

plt.show()

plot第一个参数是横轴,第二个参数是纵轴,第三个是图形样式。更多样式
这里写图片描述


散点图

散点图scatter指一些离散的点,可以理解为一盘沙子

import matplotlib.pyplot as plt
import numpy as np

N = 15

# 新建3组点(x,y),每组15个,x,y大小在区间[0,100]之间
X1 = np.random.rand(N) * 100
Y1 = np.random.rand(N) * 100

X2 = np.random.rand(N) * 100
Y2 = np.random.rand(N) * 100

X3 = np.random.rand(N) * 100
Y3 = np.random.rand(N) * 100

plt.scatter(X1, Y1, c='r', s=100, alpha=0.5)  # c颜色,s大小,alpha透明度

plt.scatter(X2, Y2, c='g', s=200, alpha=0.5)

plt.scatter(X3, Y3, c='b', s=300, alpha=0.5)

plt.show()

scatter参数1是横坐标,2是纵坐标,可以是列表,但列表的长度要能对应。
这里写图片描述
也可以更改形状,核心绘图部分稍微改下

plt.scatter(X1, Y1, c='r', s=100, alpha=0.5,marker='*')  # c颜色,s大小,alpha透明度,marker形状

plt.scatter(X2, Y2, c='g', s=200, alpha=0.5,marker='x')

plt.scatter(X3, Y3, c='b', s=300, alpha=0.5,marker='o')

这里写图片描述
更多scatter样式


饼状图

饼状图pie通常用来描绘百分比,更为直观

import matplotlib.pyplot as plt
import numpy as np

labels = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']

# data = np.random.rand(7) * 100
data = [1, 2, 3, 4, 5, 6, 7]  # data和labels的索引会对应,占比是data[i]/sum(data)

# 1.2f指的小数保留两位
plt.pie(data, labels=labels, autopct='%1.2f%%')  # 第一个参数是占比,第二个各自的标签,第三个是显示精度

plt.axis('equal')  # 让图看起来是圆的,不然就扁了
plt.legend()  # 左上角的那个图例,随机的,可以自己换位置

plt.show()

这里写图片描述
更多pie相关内容


条形图

条形图bat不言而喻,老相识了

import matplotlib.pyplot as plt
import numpy as np

N = 7

x = np.arange(N)  # 即array([0,1,2...N])

# 随机生成N0100之间的整数
data = np.random.randint(low=0, high=100, size=N)

# 随机生成几种颜色,reshape第二个参数-1指随着N变化,第一维度填满有剩就来填第二维
# 生成的是随机的N组三通道(r,g,b)的颜色
colors = np.random.rand(N * 3).reshape(N, -1)

labels = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']

plt.title("Weekday Data")  # 设置窗格标题
plt.bar(x, data, alpha=0.8, color=colors, tick_label=labels)
plt.show()

这里写图片描述
更多bar内容


直方图

直方图hist和频度有关,看上去长得和条形图差不多,但其实相差很远。因为我自己也很少用,我这就就照搬原博了。

import matplotlib.pyplot as plt
import numpy as np

data = [np.random.randint(0, n, n) for n in [3000, 4000, 5000]]
labels = ['3K', '4K', '5K']
bins = [0, 100, 500, 1000, 2000, 3000, 4000, 5000]

plt.hist(data, bins=bins, label=labels,color=['r','g','b'])
plt.legend()

plt.show()

上面这段代码中,[np.random.randint(0, n, n) for n in [3000, 4000, 5000]]生成了包含了三个数组的数组,这其中:

  • 第一个数组包含了3000个随机数,这些随机数的范围是 [0, 3000)
  • 第二个数组包含了4000个随机数,这些随机数的范围是 [0, 4000)
  • 第三个数组包含了5000个随机数,这些随机数的范围是 [0, 5000)

bins数组用来指定我们显示的直方图的边界,即:[0, 100) 会有一个数据点,[100, 500)会有一个数据点,以此类推。所以最终结果一共会显示7个数据点。同样的,我们指定了标签和图例。

这段代码的输出如下图所示:
这里写图片描述
hist更多参数


后话

很多东西要实操才有用,最好能自己查点资料。

猜你喜欢

转载自blog.csdn.net/hiudawn/article/details/80373996