嗨,大家好, 今天要来认识好用的数据绘图工具- matplotlib, 据说matplotlib的命名缘由是来自另一个程式语言matlab, 如果对matlab熟悉那对matplotlib会更快上手...
嗨,大家好,
今天要来认识好用的数据绘图工具- matplotlib,
据说matplotlib的命名缘由是来自另一个程式语言matlab,
如果对matlab熟悉那对matplotlib会更快上手
但我对matlab不熟,
直接来学习matplotlib吧
安装
matplotlib不是python的内建模组,
可能会需要另外安装(我不确定anaconda有没有帮忙装好)
安装指令:pip install matplotlib
引用模组
撰写程式前,会在程式最上方引入模组
import matplotlib.pyplot as plt
基础概念
虽然matplotlib的指令非常多,
但是最重要的就记两个指令就好:
plot()和show(),
plot()是在图形上画线(不显示在萤幕上),
show()是当我们画好图形,显示在萤幕上,
其它指令就是如何把图形画的更精美。
基础折线图
譬如说我们有x轴和y轴上的数据,
把xy轴上面的点传入plot()中,
即可画出折线图(注意传入xy的数据需一样多):
import matplotlib.pyplot as plt
xpt = [1,3,5]
ypt = [1,9,25]
plt.plot(xpt,ypt) #画线
plt.show() #显示绘製的图形
然而目前这张图非常朴素,
一般我们在做图表时,可能会想要有图表的标题,
或想要设定线段宽度、样式、颜色…等,
或是把很多条线画在同一张图里互相比较,
製作图例让人了解每条线的意思
这边就逐步介绍各项功能吧
座标轴刻度、样式设定
可以用xticks及yticks这两个指令来设定x轴及y轴的刻度,
範例:
import matplotlib.pyplot as plt
xpt = [1,3,5]
ypt = [1,9,25]
plt.plot(xpt,ypt) #画线
plt.xticks([0,5,10]) #设定x轴刻度
plt.yticks([0,10,20,50]) #设定y轴刻度
plt.show() #显示绘製的图形
用tick_params()则可以设定座标轴的刻度大小、颜色,
範例:
import matplotlib.pyplot as plt
xpt = [1,3,5]
ypt = [1,9,25]
plt.plot(xpt,ypt) #画线
plt.xticks([0,5,10]) #设定x轴刻度
plt.yticks([0,10,20,50]) #设定y轴刻度
plt.tick_params(axis='both', labelsize=60, color='green')
plt.show() #显示绘製的图形
(labelsize=60将刻度设为超大字)
标题显示
目前matplotlib暂无支援显示中文,
以下有几个重要的方法:
title: 图表标题
xlabel: x轴标题
ylabel: y轴标题
可选参数为fontsize,可以设定标题的文字大小
範例:
import matplotlib.pyplot as plt
xpt = [1,3,5]
ypt = [1,9,25]
plt.plot(xpt,ypt) #画线
plt.title("My Chart", fontsize=24) #图表标题
plt.xlabel("xValue", fontsize=16) #x轴标题
plt.ylabel("yValue", fontsize=20) #y轴标题
plt.show() #显示绘製的图形
多组数据
如果有多组数据,就在plt.plot()的参数依序输入多组数据,
例如:
import matplotlib.pyplot as plt
x = [1,2,3,4,5,6,7,8]
y_1 = [1,4,9,16,25,36,49,64]
y_2 = [1,8,27,64,125,216,343,512]
plt.plot(x,y_1,x, y_2) #画线
plt.tick_params(axis='both', labelsize=24, color='green')
plt.show() #显示绘製的图形
线条色彩、样式与图例
想要设定线条样式,
可以在plot里面设定,
底下列出常见的色彩及样式参数
字元
颜色
b
blue(蓝色)
g
green(绿色)
k
black(黑色)
r
red(红色)
w
white(白色)
y
yellow(黄色)
字元
线条样式
-
预设实线
--
虚线
-.
虚点线
:
点线
| 字元 | 标记 |
| . | 点标记|
| , | 像素标记|
| o | 圆标记|
| v | 反三角标记|
| ^ | 三角标记|
| s | 方形标记|
| p | 五角标记|
| * | 星星标记|
| + | 加号标记|
这些样式可以组合使用,
例如r-.^是红色点虚线三角标记,
g--*是绿色虚线星号标记,
範例:
import matplotlib.pyplot as plt
x = [1,2,3,4,5,6,7,8]
y_1 = [1,4,9,16,25,36,49,64]
y_2 = [1,8,27,64,125,216,343,512]
plt.plot(x,y_1,'r-.^',x, y_2, 'g--*') #画线
plt.tick_params(axis='both', labelsize=24, color='green')
plt.show() #显示绘製的图形
其实这张图画的不错了,
只是可以再加上图例说明红线跟绿线是什幺东东
图例- plt.legend()
我觉得这个语法非常特殊
範例:
import matplotlib.pyplot as plt
x = [1,2,3,4,5,6,7,8]
y_1 = [1,4,9,16,25,36,49,64]
y_2 = [1,8,27,64,125,216,343,512]
Data_1, = plt.plot(x,y_1,'r-.^',label='x_square') #画线
Data_2, = plt.plot(x, y_2, 'g--*',label='x_cube') #画线
plt.tick_params(axis='both', labelsize=24, color='green')
plt.legend(handles=[Data_1, Data_2])
plt.show() #显示绘製的图形
在plot的参数需额外设置label,
另外在这行Data_1, = …,
注意变数后面要多一个逗号
保存图档
如果想要把自己画好的图存起来,
可以使用plt.savefig()指令,
注意这个指令必须放在plt.show()之前
範例:
import matplotlib.pyplot as plt
x = [1,2,3,4,5,6,7,8]
y_1 = [1,4,9,16,25,36,49,64]
y_2 = [1,8,27,64,125,216,343,512]
Data_1, = plt.plot(x,y_1,'r-.^',label='x_square') #画线
Data_2, = plt.plot(x, y_2, 'g--*',label='x_cube') #画线
plt.tick_params(axis='both', labelsize=24, color='green')
plt.legend(handles=[Data_1, Data_2])
plt.savefig('testChart.png', bbox_inches='tight') #存档,第二个参数表示把图表外多余的空间删除
plt.show() #显示绘製的图形
绘製散点图
绘製散点图的语法跟折线图有点像,
把plt.plot()改成plt.scatter(),
但参数略有不同,plt.scatter()可选参数有s和c,
分别用来指定点的大小及颜色,範例:
(s预设20,c预设是蓝色)
import matplotlib.pyplot as plt
xpt=range(1,11)
ypt=[x**2 for x in xpt]
plt.scatter(xpt,ypt, s=40, c='green')
plt.title("Test Chart", fontsize=24) #图表标题
plt.xlabel("xValue", fontsize=16) #x轴标题
plt.ylabel("yValue", fontsize=16) #y轴标题
plt.show() #显示绘製的图形
绘製长条图
绘製长条图的语法可以用plt.bar(X, Y, width),
width表示长条图宽度
小马想到一个应用,
譬如说小明7~9月的电费支出为[531,690,326],
便可以用长条图表示:
import matplotlib.pyplot as plt
spends = [531,690,326]
X = [7,8,9]
plt.bar(X,spends, 0.35)
plt.title('Electricity Expense Table') #表格名称: 电费支出表
plt.ylabel('Monthly electricity bill') # y轴标题
plt.xticks(X,['July','August','September']) #设定x轴刻度
plt.show() #显示绘製的图形
其它补充- axes()与axis()函数
在matplotlib里面有这两个非常像的函数,
如果不明白的话读别人程式还会以为他是不是拼错字了,
所以给大家介绍介绍
axis(列表)- 设定x, y座标的範围
例子:
import matplotlib.pyplot as plt
xpt = [1,3,5]
ypt = [1,9,25]
plt.plot(xpt,ypt) #画线
plt.axis([0,20,0,50])
plt.show() #显示绘製的图形
本例将x座标的範围设在0~20,
y座标的範围设在0~50,
axes([左边位置, 下边位置, 宽, 高])- 设定图表本身的位置(左下角座标为(0,0), 右上角座标为(1,1))
可参考「参考资料2」,画出图中图的效果
範例:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 3, 4, 2, 5, 8, 6]
plt.axes([0, 0, 1, 1]) #画大图
plt.plot(x,y) #画线
xpt = [1,3,5]
ypt = [1,9,25]
plt.axes([0.7, 0.2, 0.25, 0.25]) #画小图
plt.plot(xpt,ypt) #画线
plt.show() #显示绘製的图形
参考资料
(书本) Python入门迈向高手之路王者归来/ 出版社:深石/ 作者: 洪锦魁
蛮推荐这本书的,深入浅出讲解语法,跟着实作很好懂,涵盖主题也广