实操内容来源于: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
主要是用于放置多个同级的绘画窗口
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')
饼状图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()
条形图bat
不言而喻,老相识了
import matplotlib.pyplot as plt
import numpy as np
N = 7
x = np.arange(N) # 即array([0,1,2...N])
# 随机生成N个0到100之间的整数
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()
直方图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个数据点。同样的,我们指定了标签和图例。
很多东西要实操才有用,最好能自己查点资料。