Matplotlib

Matplotlib

1.Matplotlib的简介

①Matpolib用于数据的可视化

②引入–角度线图

import matplotlib.pyplot as plt
import math
import numpy as np

x = np.arange(0, math.pi * 2, 0.05)
y = np.sin(x)
# 创建一个画布
plt.figure()
# 传入横坐标与纵坐标,并连成线
plt.plot(x, y)
# 显示图像
plt.show()


# 显示一个简单的角度线图,以弧度为单位,与正弦值相对应
import numpy as np
import math
import matplotlib.pyplot as plt

# 设置数据
x = np.arange(0, math.pi * 2, 0.05)
y = np.sin(x)
# 创建一个画布
plt.plot(x, y)
# 设置标题
plt.title("sine wave")
# 设置整体字体大小
plt.rcParams['font.size'] = 20
# 设置x轴与y轴的标签:名称、颜色、字体大小、角度
plt.xlabel('angle', color='r', fontsize=20)
plt.ylabel('sine', color='b', rotation=-60)
plt.show()  # 展示图片

③结构

画板层(canvas)–自动创建

​ 画布层–plt.figure(),在本层可以设置图片的大小和清晰度

​ 绘图区(坐标系)–axes(轴):plt.subplots()

​ 图像层:每个绘图区可以话不同类型的图表(包括设置图标的颜色和风格)

​ 辅助显示层:表格等

2.常见图形及意义

1.折线图:plot

2.散点图:scatter

①用于观察变量之间是否存在数量关联趋势,展示离群点(分布规律)

3.柱状图:bar

①对比/统计

4.直方图:histogram

①表示数据的分布状况

5.饼图:pie

①占比

3.折线图

1.折线图绘制与显示
# 显示某城市一周的温度变化
import matplotlib.pyplot as plt

# 创建画布
# figsize():指定画布大小即长宽。
# dpi=:图像的清晰度
plt.figure(figsize=(20, 8), dpi=80)
# 绘制图像
plt.plot([1, 2, 3, 4, 5, 6, 7], [17, 17, 13, 15, 16, 11, 11])
# 设置网格形式
plt.grid(True, linestyle='--', alpha=0.5)
# 保存图片到指定路径,由于show()会释放图像,因此保存操作必须要放到show()之前
plt.savefig('E:/Python_learn/zhexian.png')
# 显示图像
plt.show()
2.案例:显示温度变化
# 画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度到18度
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(60)
y = [np.random.uniform(15, 18) for i in x]

plt.figure(figsize=(20, 8))
plt.plot(x, y)
# 修改x,y刻度plt.yticks(数组或范围,替换的数据),如x为0到60每5个显示一次,然后用后面的格式替换对应的点,y显示点为0到39,每隔5个显示一次,并用后面的内容替换,替换与被替换的数据数量应该一样,参数可以为一个已知的数组,也可以使用range来获取范围
x_label = ['11点{}分'.format(i) for i in x]
y_label = ['{}摄氏度'.format(i) for i in range(0, 40, 5)]
plt.xticks(x[::5], x_label[::5])
plt.yticks(range(0, 40, 5), y_label)
# 添加网格:plt.grid(是否添加网格,linecache='线条风格',alpha=透明度),线条风格有 '-', '--', '-.', ':', 'None', ' ', '', 'solid', 'dashed', 'dashdot', 'dotted'
plt.grid(True, linestyle='--', alpha=0.5)
# 设置整体字体大小
plt.rcParams['font.size'] = 20
# 添加描述信息:标题、x轴说明、y轴说明
plt.title('温度变化')
plt.xlabel('时间变化', color='r', fontsize=20)
plt.ylabel('温度变化', color='b', rotation=-60)
plt.show()
3.完善原始折线图
# 需求:再添加一个城市的温度变化
# 手机到北京当天温度变化情况,文帝在1度到3度
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(60)
y = [np.random.uniform(15, 18) for i in x]
y_beijing = [np.random.uniform(1, 3) for i in x]

plt.figure(figsize=(20, 8))
plt.plot(x, y, color='r', linestyle='--', label='上海')
plt.plot(x, y_beijing, color='b', label='北京')

# 显示图例,要提前在plot给对应的线设置label属性
plt.legend(loc=4)  # loc='lower left'

# 修改x,y刻度plt.yticks(数组或范围,替换的数据),如x为0到60每5个显示一次,然后用后面的格式替换对应的点,y显示点为0到39,每隔5个显示一次,并用后面的内容替换,替换与被替换的数据数量应该一样,参数可以为一个已知的数组,也可以使用range来获取范围
x_label = ['11点{}分'.format(i) for i in x]
y_label = ['{}摄氏度'.format(i) for i in range(0, 40, 5)]
plt.xticks(x[::5], x_label[::5])
plt.yticks(range(0, 40, 5), y_label)
# 添加网格:plt.grid(是否添加网格,linecache='线条风格',alpha=透明度),线条风格有 '-', '--', '-.', ':', 'None', ' ', '', 'solid', 'dashed', 'dashdot', 'dotted',如果相对某条线单独设置线条风格颜色等可以在plot中进行设置
plt.grid(True, linestyle='-', alpha=0.5)
# 设置整体字体大小
plt.rcParams['font.size'] = 20
# 添加描述信息:标题、轴说明、y轴说明
plt.title('温度变化')
plt.xlabel('时间变化', color='r', fontsize=20)
plt.ylabel('温度变化', color='b', rotation=-60)
plt.show()
4.创建多个绘图区–plt.subplots
plt.subplots(nrows=1,ncols=1,figize=(),dip=):返回一个画布figur和一个绘图区axes
nrwos几行
ncols几列
用axes[index]来操作绘图区,axes[index].方法名,方法名改变规律如xticks会变为set_xticks等

import matplotlib.pyplot as plt
import numpy as np

# 创建数据
x = range(60)
y_shanghai = [np.random.uniform(15, 18) for i in x]
y_beijing = [np.random.uniform(1, 3) for i in x]
# 创建画布:添加数据注明每个轴所用的数据、与样式,以及坐标轴表示的信息
figure, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=80)
axes[0].plot(x, y_shanghai, color='r', linestyle='--', label='上海')
axes[1].plot(x, y_beijing, color='b', linestyle='-', label='北京')
# 显示图例
axes[0].legend()
axes[1].legend()
# 设置轴数据
x_label = ['11点{}分'.format(i) for i in x]
axes[0].set_xticks(x[::5])
axes[0].set_yticks(range(0, 40, 5))
axes[0].set_xticklabels(x_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_xticklabels(x_label[::5])
axes[1].set_yticks(range(0, 40, 5))
# 添加网格显示
axes[0].grid(linestyle='--', alpha=0.5)
axes[1].grid(linestyle='--', alpha=0.5)
# 设置x轴标签说明
axes[0].set_xlabel('时间变化')
axes[1].set_xlabel('时间变化')
axes[0].set_title('上海11点到12点每分钟温度变化情况')
#设置y轴标签说明
axes[0].set_ylabel('温度变化')
axes[1].set_ylabel('温度变化')
axes[1].set_title('北京11点到12点每分钟温度变化情况')
# 展示绘图
plt.show()
5.折线图应用场景

①某一个事务或指标随时间的变化状况,如呈现公司产品(不同区域)每天活跃用户数、显现app每天下载数量、线程产品新功能上线后,用户点击次数随时间的变化情况

②画各种数学函数图像

x = np.linspace(-1, 1, 1000)
y = 2 * x * x
plt.figure(figsize=(20, 8), dpi=80)
plt.plot(x, y)
plt.grid(True, linestyle='--', alpha=0.5)
plt.show()

4.散点图

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

import matplotlib.pyplot as plt
import numpy as np
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01, 20.67, 288.64, 163.56, 120.66, 207.83, 342.75, 147.9, 53.06,
     244.72, 29.51, 21.61, 483.21, 245.25, 399.25, 343.25]
y = [196.63, 203.88, 210.75, 372.68, 202.41, 475.56, 27.9, 293.34, 140.32, 104.15, 176.84, 288.23, 128.79, 112.12,
     46.63, 191.61, 33.1, 30.74, 400.02, 205.35, 330.64]
plt.figure(figsize=(20, 8), dpi=80)
plt.scatter(x, y)
plt.title('房屋价格')
plt.xlabel('房屋面积')
plt.ylabel('房价')
plt.show()

5.柱状图

1.统计票房
import matplotlib.pyplot as plt

# 准备数据
data_name = ['雷神3:诸神黄昏', '正义联盟', '东方快车谋杀案', '寻梦环游记', '全球风暴', '降魔传', '追捕', '七十七天',
             '密战']
data_count = [12341, 55515, 15292, 66685, 5151, 10001, 99998, 10011, 9000]

# 创建画布
plt.figure(figsize=(20, 8), dpi=80)
plt.bar(range(len(data_name)), data_count, color=['b', 'r', 'g', 'y', 'r', 'm', 'b', 'c', 'k'])
plt.xticks(range(len(data_name)), data_name)
plt.title('电影票房柱状图')
plt.grid(linestyle='-', alpha=0.5)
plt.xlabel('电影名称')
plt.ylabel('票房数')
plt.show()
2.同日票房对比
import matplotlib.pyplot as plt

# 准备数据
data_name = ['雷神3:诸神黄昏', '正义联盟', '寻梦环游记']
first_day = [10856.7, 10000, 8000.7]
first_weekend = [36224.9, 34467.9, 11830]
plt.figure(figsize=(20, 8), dpi=80)
# 键入数据并设置宽度
plt.bar(range(3), first_day, width=0.2, label='首日票房')
# 可以直接写一个数组[0.2,1.2,2.2]或下面的列表生成式,表示列表的位置,其实不是位置而是X的坐标数值,但是在柱状图中可以理解为在该位置生成柱状图,即柱状图的中心在该位置
plt.bar([i + 0.2 for i in range(3)], first_weekend, width=0.2, label="首周票房")
# bar是对X坐标的操作,xticks是对x标签的操作
plt.xticks([i + 0.1 for i in range(3)], data_name)
plt.legend()
plt.show()

6.直方图

1.两个基本概念

1.组数:在统计数据时,我们把数据按照不同的范围分成几组,分成的组的个数称为组数

2.组距:每一组两个端点的差

已知最大身高为175.5,最小身高为150.5,组距为5,求组数?

组数=(最大值-最小值)/组距

2.直方图与柱状图的对比

①直方图一般表示数据的分布,柱状图表示数据的大小

②直方图的长度和宽度都是有意义的,长度表示组距,宽度表示大小;而柱状图的宽度其实没有意义

3.绘图
import matplotlib.pyplot as plt
# 准备数据
data = [100, 120, 100, 160, 120, 200, 200, 240, 260, 280]
plt.figure(figsize=(20, 8), dpi=80)
distinct = 20
groupNum = int((max(data) - min(data)) / distinct)
# plt.hist(数据,组数=(maxdata-mindata)/组距,density=True(以频率或频数显示默认为None显示频数))
plt.hist(data, bins=groupNum, density=True)
# 修改刻度
plt.xticks(range(min(data), max(data))[::20])
# 横坐标是数据,纵坐标是出现的频数,加上density=True就为频率了
plt.show()

7.饼状图

超过九个数据不建议用饼图

1.绘图
import matplotlib.pyplot as plt

# 准备数据
data = ['雷神3:诸神黄昏', '正义联盟', '东方快车谋杀案', '钢铁侠3', '蜘蛛侠3', 'overlord', '复仇者联盟5', '绝地巨兽']
account = [60606, 65212, 11447, 95621, 12152, 12345, 12344, 99999]
plt.figure(figsize=(20, 8), dpi=80)
# plt.pie(data,labels=[名称数组],autopct=%1.2f%%,color=[])%1.2f%%占1哥位置保留两位小数
plt.pie(account, labels=data, autopct='%1.2f%%')
# 图例
plt.legend()
# 等圆
plt.axis('equal')d
plt.show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值