matplotlib学习笔记

一、Matplotlib初识

1.什么是matplotlib ---画2维图形的python库

 专用于开发2D图表

2.数据可视化---帮助理解数据

 js库--D3 echarts

3.实现一个简单的画图

import matplotlib.pyplot as plt
%matplotlib inline

plt.figure()   #创建画布
plt.plot([1,0,9],[4,5,6])  #[]第一个是横坐标,[]第二个是纵坐标
plt.show

4.matplotlib 三层结构

 

(1)容器层

          画板层(Canvas)底层

          画布层(Figure) 中层

          绘图区、坐标系 外层

                 x、y轴长成的结构

(2)辅助显示层 ---》在绘图区上

(3)图像层 ---》在绘图区上

二、折线图与基础绘图功能

1.折线图绘制与保存图片

(1)matplotlib.pyplot 包含了一系列类似于matlab的画图函数。作用于当前图形的当前坐标系。

(2)折线图绘制实例

            展示上海一周天气

(3)设置画布属性与图片保存

plt.figure(figsize=(,) , dpi=)
figsize:画布大小
dpi: dot per inch图像清晰度
plt.savefig(path):保存图片

注意:保存图像应该在显示图像之前 ,否则保存的图像为空

2.完善原始折线图

A.完善原始折线图--辅助显示层

#展示上海天气
#1.创建画布
plt.figure(figsize=(20,8),dpi=180)
#2.绘制图像
plt.plot([1,2,3,4,5,6,7],[17,17,18,15,11,11,13])
#保存图像   保存图像应该在显示之前
plt.save('E:')
#3.显示图像
plt.show()
  • 添加自定义x,y轴:

 

  plt.xticks(x,**kwargs)
  plt.yticks(y,**kwargs)
  • 中文字体显示:

 (1)安装字体

          双击安装

 (2)删除matplotlib缓存文件

 (3)修改配置文件

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文

 

  • 添加网格:
plt.grid(True,linestyle='--',alpha=0.5)  #三个参数分别表示要显示网格、线条分隔,透明度
  • 添加坐标轴和标题、网格线:
#画某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15-18度
import random
import matplotlib.pyplot as plt
%matplotlib inline

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

#1.准备数据
x=range(60)
y_shanghai=[random.uniform(15,18) for i in x]

#2.创建画布
plt.figure(figsize=(20,8),dpi=80)

#3.绘制图像
plt.plot(x,y_shanghai)

#修改x、y刻度
#准备x的刻度说明
x_label=["11点{}分".format(i) for i in x]
plt.xticks(x[::5],x_label)   #不用具体制定x轴的下界和上界,步长为5
plt.yticks(range(0,40,5))

#添加网格线
plt.grid(True,linestyle='--',alpha=0.5)

#添加描述信息
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('上海一周温度')

#4.显示图像
plt.show()

B.完善原始折线图--图像层

需求:再添加一个城市温度变化

样式修改在plt.plot();并添加了图例

#再添加一个城市温度变化
#收集北京的温度变化从1-3度
#准备北京的数据
import random
import matplotlib.pyplot as plt
%matplotlib inline

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

#1.准备数据
x=range(60)
y_shanghai=[random.uniform(15,18) for i in x]
y_beijing=[random.uniform(1,3) for i in x]

#2.创建画布
plt.figure(figsize=(20,8),dpi=80)

#3.绘制图像 --- 颜色样式在此修改
plt.plot(x,y_shanghai,color='r',linestyle='-.',label='上海')
plt.plot(x,y_beijing,color='b',label='北京')

#显示图例
plt.legend(loc="upper right")

#修改x、y刻度
#准备x的刻度说明
x_label=["11点{}分".format(i) for i in x]
plt.xticks(x[::5],x_label)   #不用具体制定x轴的下界和上界,步长为5
plt.yticks(range(0,40,5))

#添加网格线
plt.grid(True,linestyle='--',alpha=0.5)

#添加描述信息
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('上海|北京一周温度')

#4.显示图像
plt.show()

3. 多个坐标系显示--plt.subplots()

​figure,axes=matplotlib.pyplot.subplots(nrows=1,ncols=2,**fig_kw) #返回1行2列的图

  返回图像和画图区

axws[0].方法名  #调用第一个图对象
axws[1].方法名  #调用第二个图对象,此时为面向对象,函数大多变为了set_函数名()
#再添加一个城市温度变化
#收集北京的温度变化从1-3度

import random
import matplotlib.pyplot as plt
%matplotlib inline

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

#1.准备数据
x=range(60)
y_shanghai=[random.uniform(15,18) for i in x]
y_beijing=[random.uniform(1,3) for i in x]

#2.创建画布
#plt.figure(figsize=(20,8),dpi=80)
figure,axes=plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=80)

#3.绘制图像 --- 颜色样式在此修改
axes[0].plot(x,y_shanghai,color='r',linestyle='-.',label='上海')
axes[1].plot(x,y_beijing,color='b',label='北京')

#显示图例
axes[0].legend(loc="upper right")
axes[1].legend(loc="upper right")

#修改x、y刻度
#准备x的刻度说明
x_label=["11点{}分".format(i) for i in x]
axes[0].set_xticks(x[::8])
axes[0].set_xticklabels(x_label[::5])   #不用具体制定x轴的下界和上界,步长为5
axes[0].set_yticks(range(0,40,5))
axes[1].set_xticks(x[::8])
axes[1].set_xticklabels(x_label[::5])   #不用具体制定x轴的下界和上界,步长为5
axes[1].set_yticks(range(0,40,5))

#添加网格线
axes[0].grid(True,linestyle='--',alpha=0.5)
axes[1].grid(True,linestyle='--',alpha=0.5)

#添加描述信息
axes[0].set_xlabel('时间')
axes[0].set_ylabel('温度')
axes[0].set_title('上海一周温度')
axes[1].set_xlabel('时间')
axes[1].set_ylabel('温度')
axes[1].set_title('北京一周温度')

#4.显示图像
plt.show()
plt.show()

4.折线图应用场景

 

  • 某指标随时间的变化情况
#绘制数学函数图像
import numpy as np
import matplotlib.pyplot as plt
#1.准备数据
x=np.linspace(-1,1,1000)
y=2*x*x

#2.创建画布
plt.figure(figsize=(20,8),dpi=80)

#3.绘制图像
plt.plot(x,y)

#添加网格显示
plt.grid(linestyle='--',alpha=0.8)

#4.显示图像
plt.show()

5.常见图形种类

  • 折线图:某指标随时间的变化情况
  • 散点图:用于画点,观察数据,分析关系/规律
  • 柱状图:统计对比
  • 直方图:表示数据分布状况
  • 饼图:反应占比

 

6.散点图--探究不同数据的内在关系 plt.scatter(x,y)

  需求:探求房屋面积和价格的关系

 

 

 

#需求:探求房屋面积和价格的关系

#1.准备数据
x=[225.98,247.07,253.14,457.86,241.58,301.01,20.67,288.64,163.56,120.06,207.83,342.75,147.9,53.06,224.72,29.51,21.61,483.21,245.25,399.25,343.35]
y=[196.63,203.88,210.75,372.74,202.41,247.61,24.9,239.34,140.32,104.15,176.84,288.23,128.79,49.64,191.74,33.1,30.74,400.02,205.35,330.64,283.45]

#2.创建画布
plt.figure(figsize=(20,8),dpi=80)

#3.绘制图像
plt.scatter(x,y)

#4.显示图像
plt.show()

7.柱状图--数据对比 plt.bar()

 

  需求:对比相同天数,不同电影票房

#对比相同天数,不同电影票房

#1.准备数据
movie_names=['雷神3','正义联盟','东方快车','全球快报']

first_day=[77853,57767,22354,8725]
first_weekend=[853,5767,2354,11725]

#2.创建画布
plt.figure(figsize=(20,8),dpi=80)

#3.绘制柱状图
plt.bar(range(4),first_day,width=0.2,label='首日票房')  #参数分别为:类比;y值;宽度;标签
plt.bar([i+0.2 for i in range(4)],first_weekend,width=0.2,label='首周票房')

plt.xticks([i+0.1 for i in range(4)],movie_names)  #参数为:刻度和参数名

#4.显示图像
plt.show()

 

8.直方图--表示数据的分布 plt.hist()

 

  • 组数:按不同的范围分组得到的组数
  • 组距:每组两个端点差
  • 直方图与柱状图的区别:

      1)直方图展示数据的分布,柱状图展示数据的大小

      2)直方图x轴为定量数据,不可移动位置;状态图为分类数据,可移动位置

      3)直方图有间隔,柱状图无间隔

      4)直方图柱子宽度可不一样,柱状图柱子宽度一致

hist(x,bins)
x=time
bins 组数=(max(time)-min(time)) // 组数

 

#电影时长分布

#1.准备数据
time=[i for i in range(1,251)]
print(time)


#2.创建画布
plt.figure(figsize=(20,8),dpi=80)

#3.绘制图像
distance=5
group_num=int((max(time)-min(time))/distance)
plt.hist(time,bins=group_num)

#修改x刻度
plt.xticks(range(min(time),max(time)+5,distance))

#添加网格
plt.grid()

#4.显示图像
plt.show()

注意:(1)组距影响显示效果

(2)y周变量可以是频数或频率,默认为频数,想要变为频率添加一个参数normed=True

 

8.饼图--表示数据的占比 plt.hist()

 

plt.pie(x,labels,autopct,colors) #参数分别表示:数量,自指定%动百分比;
#每部分名称; 占比显示指定%1.2f%% ; 每部分颜色 ;%转义字符
#显示不同电影拍片占比

#1.准备数据
movie_names=['雷神3','正义联盟','东方快车','全球快报','将魔装']
place_conut=[60605,54526,20156,32756,9945]

#2.创建画布
plt.figure(figsize=(20,8),dpi=80)

#3.绘制图像
plt.pie(place_conut,labels=movie_names,colors=['b','g','y','r','c'],autopct="%1.2f%%")

plt.legend()

plt.axis('equal')  #让图像摆正
#4.显示图像
plt.show()

 

 

9.总结

  • pandas画图使用的就是matplotlib

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值