Matplotlib

  1. matplotlib是什么?
    python底层的绘图工具
  2. matplotlib的基本要点
    • 如何设置图片的大小;
    • 如何保存到本地;
    • x轴和y轴的描述信息;
    • 中文显示乱码问题;
    • 调整x轴和y轴的刻度;
    • x轴的刻度信息过长, 如何调整?
    • 标记最高点;
  3. matplotlib的折线图, 柱状图, 直方图, 散点图;

上面的点都会在下面的案例中解决

案例

1. 折线图

先写一个最简单的

from matplotlib import pyplot as plt
from matplotlib import font_manager

# 图表的x轴的数据, 是一个可迭代的数据类型
x_times = range(0, 24, 2)
# 图表的y轴的数据, 是一个可迭代的数据类型
y_temp = [15, 12, 13, 20, 23, 30, 15, 12, 13, 20, 23, 30]
# 传入x和y轴的数据, 绘制图形;
plt.plot(x_times, y_temp)

# 保存到本地;
plt.savefig('temp.png')

# 在执行程序时显示图像
# plt.show()

在这里插入图片描述
上图中可以看出很多不完美,横坐标刻度等都需要调整

# 案例1: 一天中每隔两个小时气温变化的折线图绘制;
from matplotlib import pyplot as plt
from matplotlib import font_manager
# 中文显示乱码问题;
myfont = font_manager.FontProperties(fname="/usr/share/fonts/cjkuni-uming/uming.ttc", size=18)
titlefont = font_manager.FontProperties(fname="/usr/share/fonts/cjkuni-uming/uming.ttc", size=24)

# 图表的x轴的数据, 是一个可迭代的数据类型
x_times = range(0, 24, 2)
# 图表的y轴的数据, 是一个可迭代的数据类型
y_temp = [15, 12, 13, 20, 23, 30, 15, 12, 13, 20, 23, 30]

#  设置图片的大小;
plt.figure(figsize=(10, 10))

# 传入x和y轴的数据, 绘制图形;
plt.plot(x_times, y_temp)

#  x轴和y轴的描述信息及标题;
plt.title("一天的气温变化(每隔两个小时)",fontproperties=titlefont )
plt.xlabel("时间", fontproperties=myfont)
plt.ylabel("温度", fontproperties=myfont)

#  调整x轴和y轴的刻度;
# rotation 倾斜角度
# fontproperties 字体
plt.xticks(x_times, labels=["%s时0分"%(i) for i in x_times], fontproperties=myfont, rotation=45)
y_temp_range = range(min(y_temp), max(y_temp)+1, 2)
plt.yticks(y_temp_range, labels=["%s 。C"%(i) for i in y_temp_range], fontproperties=myfont)

# 做标记,一个蓝色的点
plt.scatter(x_times[2], y_temp[2], color='b')

# 做标记,一个红色的圈
plt.scatter(x_times[2], y_temp[2], color='', marker='o', edgecolors='r', s=300) #标记

# 2). 如何保存到本地;
plt.savefig('doc/temp.png')

# 在执行程序时显示图像
# plt.show()

在同一个图里面绘制多条折线,

在同一个图里面绘制多条折线,
#  color: 线条颜色
#  linestyle: 线条的风格
#  linewidth: 线条的粗细
#  alpha: 透明度
plt.plot(x_age, y_count_1, color='g', linestyle='-.', linewidth=5, alpha=0.5, label="自己")
plt.plot(x_age, y_count_2, color='r', linestyle='--', linewidth=3, alpha=0.3, label="同桌")

添加图例

plt.legend(loc="upper right", prop=titlefont)

添加网格

plt.grid(alpha=0.3)
# gca====get current axis 获取当前的坐标轴
ax = plt.gca()
# 设置右边框和上边框;
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 设置x轴为下边框
ax.xaxis.set_ticks_position('bottom')
# 设置y轴为作边框
ax.yaxis.set_ticks_position('left')
# 设置x轴和y轴的交点为(0, 0)点;
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0 ))
2. 散点图
# 传入x和y轴的数据, 绘制图形;
plt.scatter(x_march, y_temp_march, label="3月的温度变化", color='r', alpha=0.5)
plt.scatter(x_oct, y_temp_oct, label="10月的温度变化", color='g', alpha=0.5)
3. 条形图
# 生成竖向的条形图
plt.bar(range(len(x_movies)), y_money, color='orange', width=0.5)
# # 生成横向的条形图
# plt.barh(range(len(x_movies)), y_money, color='orange', height=0.7)

多个条形图

bar_width = 0.3

plt.bar(x_range, y_14, color='green', width=bar_width, label="2017-09-14票房数据")
#  为了让三个条形不叠在一起,所以横坐标+条形的宽度
plt.bar([i + bar_width for i in x_range], y_15, color='red', width=bar_width, label="2017-09-15票房数据")
plt.bar([i + bar_width * 2 for i in x_range], y_16, color='orange', width=bar_width, label="2017-09-16票房数据")
4. 直方图

直方图更多的应用场景:

  • 用户年龄的分布状态;
  • 一段时间内用户的点击数分布状态;
  • 用户活跃时间的分布状态.
# 组距:每个小组里面端点的距离;
# 组数 = 极差 / 组距
import random
from matplotlib import pyplot as plt

y = [random.randint(60, 180) for i in range(250)]

d = 10  # 组距
# 组数
num_bins = (max(y) - min(y)) // d

# 设置x轴的刻度范围,
plt.xticks(list(range(min(y), max(y) + d))[::d])

plt.grid(linestyle='-.', alpha=0.3)

# 直方图绘制数据分为20个分组;
plt.hist(y, num_bins)
plt.savefig('01_hist.png')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值