matplotlib :最流行的python底层绘图库,主要做数据可视化图表,名字取材于MATLAB,模仿matlab构建。
1,能够将数据可视化,更直观的呈现
2,使数据更加客观,更具说服力
假设一天中每隔两个小时的(range(0,24,2))的气温分别是[15,13,14,5,17,20,25,26,27,22,18,15]
#!/usr/bin/python
# -*- coding: utf-8 -*-
from matplotlib import pyplot as plt
x = range(2,26,2) #数据在x轴的位置是一个可迭代的对象
y = [15,13,14,15,17,20,25,26,27,22,18,15]
plt.plot(x,y) #传入x和y 通过plot绘制出折线图
plt.show() #在执行程序的时间 展示图形
生成图片如下
我们常常需要对图片做一下的处理:
1 设置图片的大小(想要一个高清无码的大图)
2 保存到本地
3 描述信息,比如x轴代表什么,y 轴代表什么,这个图片代表是
4 调整x轴或者y 轴的刻度的间距
5 线条的样式(比如,颜色,透明度等)
6 标记处特殊的点,比如告诉别人最高点最低点在哪里
7 给图片添加一个水印(防伪,防盗用)
#!/usr/bin/python
# -*- coding: utf-8 -*-
from matplotlib import pyplot as plt
fig = plt.figure(figsize=(20,8),dpi=80)
#figure 图形图标的意思,在这里指的是我们所画的图
#通过实例化一个figure,并且传递参数,能够在后台自动使用该figure示例
#在图像模糊的时候,可以传入figure参数,让图片更加清晰
x = range(2,26,2) #数据在x轴的位置是一个可迭代的对象
y = [15,13,14,15,17,20,25,26,27,22,18,15]
plt.plot(x,y) #传入x和y 通过plot绘制出折线图
plt.savefig("./sig_size.png") #保存图片
#可以保存为svg 这种矢量图格式,放大不会有锯齿
plt.show() #在执行程序的时间 展示图形
plt.xticks(x)#设置x轴的刻度
plt.yticks(range(min(y),max(y)+2))#设置y轴的刻度
如果列表a表示10点到12点每一分钟的气温变化,如何绘制曲线图,观察每分钟的气温变化情况?
#!/usr/bin/python
# -*- coding: utf-8 -*-
from matplotlib import pyplot as plt
import random
fig = plt.figure(figsize=(16,8),dpi=80)
y = [random.randint(20,35) for i in range(120)]
x = range(0,120)
plt.plot(x,y)
#调整x轴的刻度
#_x = list(x)[::10]
#_xtick_labels = ["hello,{}".format(i) for i in _x]
_xtick_labels = [u"10点{}分".format(i) for i in range(60)]
_xtick_labels += [u"11点{}分".format(i) for i in range(60)]
#取步长,数字和字符串一一对应,数据的长度一样,rotation 旋转的角度
plt.xticks(list(x)[::3],_xtick_labels[::3],rotation = 45)
plt.show()
显示结果如下:
为什么并不能显示中文:
matplotlib 默认不支持中文字符。
查看linux/mac下面支持的字体:
fc-list 查看支持的中文字体
fc-list :lang=zh 查看支持的中文字符(:号前面有空格)
查看windows下面支持到字体:
到C:\Windows\Fonts 目录下查看
如何修改matplotlib 的默认字体
通过matplotlib下的font_manager可以解决(windows/linux/mac)
#!/usr/bin/python
# -*- coding: utf-8 -*-
from matplotlib import pyplot as plt
import random
import matplotlib
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname = 'C:\Windows\Fonts\msyh.ttc')
fig = plt.figure(figsize=(16,8),dpi=80)
y = [random.randint(20,35) for i in range(120)]
x = range(0,120)
plt.plot(x,y)
#调整x轴的刻度
#_x = list(x)[::10]
#_xtick_labels = ["hello,{}".format(i) for i in _x]
_xtick_labels = [u"10点{}分".format(i) for i in range(60)]
_xtick_labels += [u"11点{}分".format(i) for i in range(60)]
#取步长,数字和字符串一一对应,数据的长度一样,rotation 旋转的角度
plt.xticks(list(x)[::3],_xtick_labels[::3],rotation = 45,fontproperties = my_font)
plt.show()
效果图如下
plt.xlabel(u"时间",fontproperties = my_font)
plt.ylabel(u"温度 单位/℃",fontproperties = my_font)
plt.title(u"10点到12点每分钟气温变化情况",fontproperties = my_font)
效果图如下
假设某人11到30岁交男(女)朋友的个数如列表a,请绘制出直线图,以便分析每年交男(女)朋友数量的走势
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
#!/usr/bin/python
# -*- coding: utf-8 -*-
from matplotlib import pyplot as plt
import random
import matplotlib
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname = 'C:\Windows\Fonts\msyh.ttc')
#设置图片大小
fig = plt.figure(figsize=(16,8),dpi=80)
y = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
x = range(11,31)
plt.plot(x,y)
_xtick_labels = [u"{}岁".format(i) for i in range(11,31)]
plt.xticks(x,_xtick_labels,fontproperties = my_font)
#设置x轴信息
plt.xlabel(u"年龄",fontproperties = my_font)
#设置y轴信息
plt.ylabel(u"个数 单位/个",fontproperties = my_font)
#设置标题
plt.title(u"11岁到30岁交男(女)朋友的个数",fontproperties = my_font)
#设置网格 alpha 透明度
plt.grid(alpha=0.4)
#展示图片
plt.show()
效果图展示如下
#!/usr/bin/python
# -*- coding: utf-8 -*-
from matplotlib import pyplot as plt
import random
import matplotlib
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname = 'C:\Windows\Fonts\msyh.ttc')
#设置图片大小
fig = plt.figure(figsize=(16,8),dpi=80)
y_1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y_2 = [1,0,3,1,2,2,3,2,1,2,2,1,1,1,1,1,1,1,1,1]
x = range(11,31)
plt.plot(x,y_1,label = u"小明",linestyle = ':')
#这里可以设置线条的颜色
# color = 'r' 线条颜色
# linestyle = '-' 线条风格 '-' 实线 '--'虚线破折线 '-.' 点划线 ':' 点虚线,虚线 ''留空或空格,无线条
# linestyle = 5 线条粗细
# alpha = 0.5 线条透明度
plt.plot(x,y_2,label = u"小张")
_xtick_labels = [u"{}岁".format(i) for i in range(11,31)]
plt.xticks(x,_xtick_labels,fontproperties = my_font)
#设置x轴信息
plt.xlabel(u"年龄",fontproperties = my_font)
#设置y轴信息
plt.ylabel(u"个数 单位/个",fontproperties = my_font)
#设置标题
plt.title(u"11岁到30岁交男(女)朋友的个数",fontproperties = my_font)
#设置网格 alpha 透明度
plt.grid(alpha=0.4)
#添加图例
plt.legend(prop = my_font,loc = "upper left")
#展示图片
plt.show()
效果图展示如下