matplotlib基础学习
matplotlib基础学习
画图架构,并计算
用于2D图片的开发,用于数据可视化
In [35]:
import matplotlib.pyplot as plt
import random
In [37]:
# 解决中文乱码的问题
#解决中文显示问题
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
架构 脚本-->美工--->后端 后端分配了相应部分呢
美工:figure, axes,axis
脚本层,pyplot可以指挥美工文本就可以,与图形交互。
基础绘图
折现图UI之
点的坐标,横坐标,纵坐标
In [38]:
#实现温度变换折现绘制
#1.先生成fiugure
plt.figure(figsize=(20,8)) #t图片大小
#2.准备数据
plt.plot([1,2,3,4,5,6,7],[17,17,18,12,16,15,12])
#3.显示绘图
plt.show
#4.图片保存
plt.savefig("test.png")
温度变化折线图
画出某个城市11-12点的温度变化的趋势
In [69]:
#显示11-12
#1.生成
plt.figure(figsize=(20,8)) #t图片大小
# 准备数据
x = range(60)
y = [random.uniform(15,18) for i in range(60)]
#画图
#--------------------自定义显示------------------
#传入数据
plt.plot(x,y,label="上海")
#增加标题坐标描述
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("温度时间变化图")
#-----------------------在增加一个城市的温度
#being 1-3
y_beijing = [random.uniform(1,3) for i in range(60)]
#用一个就可以
#显示图形特点
plt.plot(x,y_beijing,color='r',linestyle='--',label='北京')
#指定x和y的刻度
#指定x显示列表步长,指定和第一个参数对应的zhon中文
x_ch = ["11点{}分".format(i) for i in x]
plt.xticks(x[::5],x_ch[::5])
#制定y数据范围0-40
y_ticks = range(40)
#显示y
plt.yticks(y_ticks[::5])
#添加图例的显示,必须添加label
plt.legend(loc="best")
plt.savefig("sdf")
plt.show()
一个坐标系里面有两个坐标轴
两个城市代码多个坐标系新鲜事 subplots
In [82]:
#显示11-12
#1.生成有几行,有几个坐标系
#当在多个数据画图
fig,ax = plt.subplots(nrows=1,ncols=2,figsize=(20,8))
#个参数,fig代表画图的地方,然后ax代表第几个坐标系
# 准备数据
x = range(60)
y = [random.uniform(15,18) for i in range(60)]
#画图
#--------------------自定义显示------------------
#传入数据
#plt.plot(x,y,label="上海")
ax[0].plot(x,y,label="上海")
#增加标题坐标描述
ax[0].set_xlabel("时间")
ax[1].set_xlabel("时间")
ax[0].set_ylabel("温度")
ax[1].set_ylabel("温度")
ax[0].set_title("温度时间变化图")
ax[1].set_title("温度时间变化图")
#-----------------------在增加一个城市的温度
#being 1-3
y_beijing = [random.uniform(1,3) for i in range(60)]
#用一个就可以
#显示图形特点
#plt.plot(x,y_beijing,color='r',linestyle='--',label='北京')
ax[1].plot(x,y_beijing,color='r',linestyle='--',label='北京')
#指定x和y的刻度
#指定x显示列表步长,指定和第一个参数对应的zhon中文
x_ch = ["11点{}分".format(i) for i in x]
# t.xticks(x[::5],x_ch[::5])
ax[0].set_xticks(x[::5],x_ch[::5])
ax[1].set_xticks(x[::5],x_ch[::5])
#制定y数据范围0-40
y_ticks = range(40)
#显示y
#lt.yticks(y_ticks[::5])
ax[0].set_yticks(y_ticks[::5])
ax[1].set_yticks(y_ticks[::5])
#添加图例的显示,必须添加label
plt.legend(loc="best")
Out[82]:
<matplotlib.legend.Legend at 0xec3b275550>
应用场景(公司呈现场景,下载数量。点击与时间变化)
柱状图
电影票房
In [100]:
#电影票房对比图
plt.figure(figsize=(20,8))
#电影名称
movie_name = ['a','b','c','d','e','f','g','h','i','g']
y = [random.randint(15000,18000) for i in range(10)]
x = range(len(movie_name))
#plt.bar显示填入x全是数字
plt.bar(x,y,width=0.2,color=['r','b','y','r','b','y','r','b','y','r'])
#修改刻度以及电影名字
plt.xticks(x,movie_name)
print(y)
plt.show()
[17297, 15606, 16751, 16699, 17855, 15152, 17067, 16154, 17248, 15898]
####于不同的电影的上映时间不一样,因此首日与首轴的数据可以jnxi进行对比
In [101]:
#电影票房对比图
plt.figure(figsize=(20,8))
movie_name=['a','b','c','d']
firstday = [random.randint(1400,1700) for i in range(4)]
firstweek = [random.randint(14000,17000) for i in range(4)]
x = range(len(movie_name))
plt.bar(x,firstday,width=0.2,label="首日")
plt.bar([i+0.2 for i in x],firstweek,width=0.2,label="首周")
#plt.bar显示填入x全是数字
#plt.bar(x,y,width=0.2,color=['r','b','y','r','b','y','r','b','y','r'])
#修改刻度以及电影名字
plt.xticks([i+0.1 for i in x],movie_name)
plt.legend(loc="best")
plt.show()
应用场景分类收入的对比可以使用柱状图的表示
直方图
直方图与柱状图不同,统计某个去简短的数量
组数:在统计数据时候按照不同的范围分成几个组 组距:每一组两个端点的差值
电影时长的绘制100-120分钟的数量
In [115]:
#电影时长分布直方图
#组数 = 极差/组距
#组距 2(2)
#创建一个figure
plt.figure(figsize=(20,8))
#时长
time = [random.randint(100,120) for i in range(25)]
#组距
bins=2
group = int((max(time)-min(time))/bins)
#normed参数,指定纵坐标频率
#频率=相加/总数
#plt.hist(time,group,normed=1)
plt.hist(time,group)
#增加网格显示
plt.grid(True,linestyle="--",alpha=0.8)
#,x,y,画图的形式如下
plt.show()
直方图的场景,那些数据的分布以及数据集中,可以分析出异常,或者孤立的数据点
柱状图以及直方图的区别是在于数量不同,以及表示的形式不同
直方图:x坐标连续数据,数据大 柱状图:x为类别,数据小,某一个类别
饼图
应用于各个类别,表示不同分类的占比情况,
电影的拍片量
plt.pie(x,labels=,autopct=,color)
In [125]:
#电影的拍片占比响应
plt.figure(figsize=(20,8))
movie_name = ['a','b','c','d','e','f','g','h','i','g']
count = [random.randint(15000,18000) for i in range(len(movie_name))]
#显示饼图
plt.pie(count,labels=movie_name,autopct="%1.1f%%",colors = ['b','r','g','m','y','b','r','g','m','y'])
#%1.1f%% .后面表示小数的位数
#画图的时候要注意正圆形
#-------------添加axis指定保持圆形,抱枕长和宽一样
plt.axis('equal')
plt.legend(loc="best")
plt.show()
应用情况,应用占比的情况
绘制不同的图,会用常见的api常见的情形
散点图
略
In [ ]: