什么是maplotlib¶
matplotlib是最流行的Python底层的绘图库,主要做数据的可视化.
绘制折线图¶
示例1:绘制一个简单图表¶
In [3]:
from matplotlib import pyplot as plt
#pyplot是绘图的模块
#设置图片大小
#figure是图形图标的意思,这里是指我们画的图
#figsize是图片的大小,dpi是指图片的像素
fig = plt.figure(figsize=(20,6),dpi=80)
x = range(2,26,2)
y = [15,13,14.5,17,20,25,26,26,27,22,18,15]
#绘图
plt.plot(x,y)
#设置x轴的刻度
#plt.xticks(x)
plt.xticks(range(0,26,2))
#设置y轴的刻度
#plt.yticks(y)
#plt.yticks(range(0,50,2))
plt.yticks(range(min(y),max(y)+1))
#保存
plt.savefig("./1101.png")
#展示图形
plt.show()
示例2:绘制两个小时内的气温变化¶
中文显示
方法1:
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
方法2:
my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\simhei.ttf")
In [15]:
#eoding: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\simhei.ttf")
x=range(0,120)
#取120个20到35之间的随机数
y= [random.randint(20,35) for i in range(120)]
#设置图表大小
fig = plt.figure(figsize=(20,6),dpi=80)
#设置x轴
_xtick = ["10点{:0>2d}分".format(i) for i in range(0,60)]
_xtick += ["11点{:0>2d}分".format(i) for i in range(0,60)]
# rotation表示x轴逆时针旋转的角度
#[::3]表示将序列以步长为3进行切割
plt.xticks(list(x)[::3],_xtick[::3],rotation=45,fontproperties=my_font)
#添加描述信息
plt.xlabel("时间",fontproperties=my_font)
plt.ylabel("温度 单位℃",fontproperties=my_font)
plt.title("10点到12点的气温变化情况",fontproperties=my_font)
#绘制网格,alpha参数设置网格的透明度
plt.grid(alpha=0.3)
#绘图
plt.plot(x,y)
#展示
plt.show()
示例3:绘制两个图形¶
In [126]:
#eoding: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\simhei.ttf")
#y轴
a=[40,50,52,50,53,53,56,58,60,65,64,66,70,70,71,72,77,78,77,75]
b=[50,55,55,58,65,67,70,75,80,81,82,75,65,75,70,65,65,66,70,71]
#x轴
x=range(11,31)
#设置图表大小
fig = pit.figure(figsize=(20,6),dpi=80)
#设置x轴
_xtick = ["{}岁".format(i) for i in range(11,31)]
# rotation表示x轴逆时针旋转的角度
#[::3]表示将序列以步长为3进行切割
plt.xticks(list(x),_xtick,rotation=45,fontproperties=my_font)
#添加描述信息
plt.xlabel("年龄",fontproperties=my_font)
plt.ylabel("体重 单位kg",fontproperties=my_font)
plt.title("11岁点到30岁的体重变化情况",fontproperties=my_font)
#绘制网格,alpha参数设置网格的透明度
plt.grid(alpha=0.3)
#绘图
plt.plot(x,a,label="张三")
plt.plot(x,b,label="李四")
# 添加图例
plt.legend(prop=my_font)
#展示
plt.show()
自定义绘制图形的风格
plt.plot(
x,
y,
color='r', #线条颜色
linestyle='--', #线条风格
alpha=0.5 #透明度
)
线条风格:
-实线
--虚线
-.点划线
:点虚线
''空格,无线条
绘制散点图¶
scatter(x,y)绘制散点图
将plt.plot(x,y)改为plt.scatter(x,y)即绘制了散点图
绘制条形图¶
bar(x,y)
将plt.plot(x,y)改为plt.bar(x,y)即绘制了散点图
In [243]:
#eoding: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\simhei.ttf")
#y轴
x=["战狼","速度与激情","红海行动","湄公河行动","摔跤吧!爸爸"]
y=[56.01,26.94,45.02,17.25,26.55]
plt.xticks(range(len(x)),x,fontproperties=my_font)
#绘图
plt.bar(range(len(x)),y)
plt.title("电影票房",fontproperties=my_font)
#展示
plt.show()
barh()函数绘制横着的条形图
In [147]:
#eoding: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\simhei.ttf")
#y轴
x=["战狼","速度与激情","红海行动","湄公河行动","摔跤吧!爸爸"]
y=[56.01,26.94,45.02,17.25,26.55]
plt.yticks(range(len(x)),x,fontproperties=my_font)
#绘图
plt.barh(range(len(x)),y)
plt.title("电影票房",fontproperties=my_font)
#展示
plt.show()
In [239]:
#eoding:utf-8
from matplotlib import pyplot as plt
import random
import matplotlib
from matplotlib import font_manager
fig = pit.figure(figsize=(20,6),dpi=80)
#设置中文字体
my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\simhei.ttf")
bar_width=0.3
#y轴
x=["战狼","速度与激情","红海行动","湄公河行动","摔跤吧!爸爸"]
# 电影1号到4号的票房
y_1 = [10.01,8.94,15.02,6.25,3.55]
y_2 = [16.01,7.94,14.02,12.25,9.55]
y_3 = [18.01,9.94,11.02,13.25,13.55]
y_4 = [25.01,6.94,9.02,15.25,9.55]
x_1 = [i*2 for i in range(len(x))]
x_2 = [i+bar_width for i in x_1]
x_3 = [i+bar_width for i in x_2]
x_4 = [i+bar_width for i in x_3]
plt.xticks(x_3,x,fontproperties=my_font)
#绘图
plt.bar(x_1,y_1,width=bar_width,label="10月1日")
plt.bar(x_2,y_2,width=bar_width,label="10月2日")
plt.bar(x_3,y_3,width=bar_width,label="10月3日")
plt.bar(x_4,y_4,width=bar_width,label="10月4日")
plt.xlabel("片名",fontproperties=my_font)
plt.ylabel("票房 单位亿元",fontproperties=my_font)
plt.title("电影票房",fontproperties=my_font)
# 添加图例
plt.legend(prop=my_font)
#展示
plt.show()
绘制直方图¶
函数hist()绘制直方图
示例1:获取250部电影的时长,以直方图方式展示出来¶
In [298]:
#eoding:utf-8
from matplotlib import pyplot as plt
import random
import matplotlib
from matplotlib import font_manager
# 设置图表大小
fig = pit.figure(figsize=(20,6),dpi=80)
#设置中文字体
my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\simhei.ttf")
# 取250个数
a = [random.randint(90,150) for i in range(150)]
a += [random.randint(110,130) for i in range(100)]
# 设置组距
d = 5
# 设置组数
num_bins = (max(a)-min(a))//d #//除是取整
plt.hist(a,num_bins)
#density为True,将纵坐标的频数改为频率方式显示
# plt.hist(a,num_bins,density=True)
# 设置x轴的取值
plt.xticks(range(min(a),max(a)+d,d))
#显示网格
plt.grid()
plt.xlabel("时长 单位min",fontproperties=my_font)
plt.ylabel("频数",fontproperties=my_font)
plt.title("电影时长分布图",fontproperties=my_font)
#展示
plt.show()
总结¶
matplotlib.plot(x,y) #折线图
matplotlib.bar(x,y) #条形图
matplotlib.scatter(x,y) #散点图
matplotlib.hist(data,bins,normed) #直方图
折线图:以折线的上升或下降来表示统计数量的增减变化的统计图
特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)
直方图:由一系列高度不等的纵向条纹或线段表示数据分布的情况。
一般用横轴表示数据范围,纵轴表示分布情况。
特点:绘制连续性的数据,展示一组或者多组数据的分布状况(统计)
条形图:排列在工作表的列或行中的数据可以绘制到条形图中。
特点:绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计)
散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。
特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)