matplotlib

安装

视频学习地址
pip install matplotlib

官网案例图形

常用统计图对比:

  • 折线图:以折线的上升或者下降来表示统计数量的增减变化的统计图
    • 特点:能够显示数据的变化趋势,反映事物的变化情况(变化)-plot
  • 直方图:由一系列高度不等的纵向条纹或线段表示数据分布的情况。一般用横轴表示数据范围,纵轴表示分布情况-hist
    • 特点:绘制连续性的数据,詹氏一族或者多组数据的分布情况(统计)
    • 场景:用户的年龄分布状态;一段时间内用户点击次数的分布状态;用户活跃时间的分布状态
  • 条形图:排列在工作表的列或行中的数据可以绘制到条形图中。-bar/barh
    • 特点:绘制离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计)
    • 场景:数量统计,频率统计
  • 散点图 :用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或者总结坐标点的分布模式-scatter
    • 特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)
    • 应用场景:不同条件(维度)之间的内在关联关系;观察数据的离散聚合程度

折线图

  • 简单示例
from matplotlib import pyplot as plt

x = range(2, 26, 2)
y = [15,13,14.5,17,20,25,26,26,27,22,18,15]

plt.plot(x, y)

plt.show()

为折线图添加更多元素(修改默认元素)

  1. 设置图片大小(想要一个高清无码大图)
from matplotlib import pyplot as plt

fig = plt.figure(figsize=(20.8), dpi=80)
    # figure图形图标的意思,在这里值得就是画的图,figsize,宽高,dpi像素,dpi每英寸的像素
    # 通过实例化一个fihure并且传递参数,能够在后台自动使用改figure实例
    # 在图像模糊的时候可以传入dpi参数,让图片更加清晰
  1. 保存到本地
  2. 描述信息,比如x轴和y轴表示什么,这个图表示什么
  3. 调整x或者y的刻度的间距
  4. 标记处特殊的点(比如告诉别人最高点和最低点)
  5. 给图片添加一个水印(防伪,防止盗用)
from matplotlib import pyplot as plt



x = range(2, 26, 2)
y = [15,13,14.5,17,20,25,26,26,27,22,18,15]

# 设置图片大小
plt.figure(figsize=(20,8), dpi=80)

# 绘图
plt.plot(x, y)

# 绘制x轴的刻度
plt.xticks(x) # 原生x值  # 自定义,传列表即可,[range(1,24)],

# 设置y轴的刻度
plt.xticks(range(min(y), max(y)+1))

# 保存图片,可以保存为svg这种矢量图格式,放大不会有锯齿
plt.savefig('./1.png')

plt.show()

显示中文刻度

matpoltlib默认不支持中文字符,外国人写的东西

import random

from matplotlib import pyplot as plt
from matplotlib import font_manager

# 方式一(失败率高):
# font = {'family': 'MicroSoft YaHei',
#         'weight': 'bold',
#         'size': 'larger'}
#
# matplotlib.rc("font", **font)
# # matplotlib.rc("font", family='MicroSoft YaHei',weight='bold')

# 方式二:
my_font = font_manager.FontProperties(fname=r'c:\windows\fonts\msyh.ttc')

x = range(0,120)
y = [random.randint(20, 35) for i in range(120)]

plt.figure(figsize=(20, 8),dpi=80)

plt.plot(x,y)

# 调整x轴的刻度
_x = x[::3]
_xtick_labels = ['哈哈,{}'.format(i) for i in _x]
plt.xticks(_x, _xtick_labels, rotation=45, fontproperties=my_font)


# 添加描述信息
plt.xlabel("时间",fontproperties=my_font)
plt.ylabel("温度",fontproperties=my_font)
plt.title("时间温度图",fontproperties=my_font)


plt.show()

练习1:
x轴表示年龄,11-30岁
y轴表示女友数量

from matplotlib import pyplot as plt, font_manager


my_font = font_manager.FontProperties(fname=r'c:\windows\fonts\msyh.ttc')

y = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
x = range(11,31)


plt.figure(figsize=(20,8),dpi=80)

plt.plot(x,y)


# 设置x轴刻度
_xtrick_labels = [f'{i}岁' for i in x]
plt.xticks(x, _xtrick_labels, fontproperties=my_font)
plt.yticks(range(0,9))


# 绘制网格
plt.grid(alpha=0.4)

plt.show()

练习2:
添加两个图形

from matplotlib import pyplot as plt, font_manager


my_font = font_manager.FontProperties(fname=r'c:\windows\fonts\msyh.ttc')

y_1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y_2 = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]
x = range(11,31)


plt.figure(figsize=(20,8),dpi=80)

plt.plot(x,y_1, label='自己',color="blue",linestyle=':', alpha=0.5)  # 颜色,线条类型,透明度
plt.plot(x,y_2, label='另一个')


# 设置x轴刻度
_xtrick_labels = [f'{i}岁' for i in x]
plt.xticks(x, _xtrick_labels, fontproperties=my_font)
plt.yticks(range(0,9))

# 添加图例
plt.legend(prop=my_font,loc="upper left") # loc表示图例位置,默认右上角 注意:设置字体,是prop不是properies,只有这里是例外


# 绘制网格
plt.grid(alpha=0.4)

plt.show()

散点图

案例:假设通过爬虫获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间(天)变化的某种规律?
a = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
b = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]

from matplotlib import pyplot as plt
from matplotlib import font_manager


my_font = font_manager.FontProperties(fname=r'c:\windows\fonts\msyh.ttc')
y_3 = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
y_10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]

x_3 = range(1, 32)
x_10 = range(51, 82)


# 设置图形大小
plt.figure(figsize=(20, 8), dpi=80)


plt.scatter(x_3, y_3, label='3月份', s=100 # 可以设置点的大小,区分两个图的重合点)
plt.scatter(x_10, y_10,label = '10月分')


# 调整x轴的刻度
_x = list(x_3) + list(x_10)
_x_labels = [f"3月{i}日"for i in x_3]
_x_labels += [f"10月{i}日" for i in x_10]
plt.xticks(_x[::3], _x_labels[::3], fontproperties=my_font, rotation=45)


# 添加描述信息
plt.xlabel('时间',fontproperties=my_font)
plt.ylabel('温度',fontproperties=my_font)
plt.title('温差变化图',fontproperties=my_font)


# 添加图例
plt.legend(loc="upper left", prop=my_font)

# 展示
plt.show()

条形图

案例:假设获取了2017年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据?
a = [“战狼2”,“速度与激情8”,“功夫瑜伽”,“西游伏妖篇”,“变形金刚5”,“最后的骑士”,“摔跤吧!爸爸”,“加勒比海盗5”,“死无对证”,“金刚”,“骷髅岛”,“极限特工:终极回归”,“生化危机6:终章”,“乘风破浪”,“神偷奶爸3”,“智取威虎山”,“大闹天竺”,“金刚狼3”,“殊死一战”,“蜘蛛侠:英雄归来”,“悟空传”,“银河护卫队2”,“情圣”,“新木乃伊”]

b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]

纵向:

from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font = font_manager.FontProperties(fname=r'c:\windows\fonts\msyh.ttc')

a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5","最后的骑士","摔跤吧!爸爸\n","加勒比海盗5","死无对证","金刚","骷髅岛","极限特工:终极回归\n","生化危机6\n终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3","殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊"]

b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,3.25,4.25,2.25,3.25]

plt.figure(figsize=(20, 15), dpi=80)

plt.bar(range(len(a)), b, width=0.3)

plt.xticks(range(len(a)), a, fontproperties=my_font, rotation=90)

plt.show()

横向

from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font = font_manager.FontProperties(fname=r'c:\windows\fonts\msyh.ttc')

a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5","最后的骑士","摔跤吧!爸爸\n","加勒比海盗5","死无对证","金刚","骷髅岛","极限特工:终极回归\n","生化危机6\n终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3","殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊"]

b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,3.25,4.25,2.25,3.25]

plt.figure(figsize=(20, 15), dpi=80)

plt.barh(range(len(a)), b, height=0.3, color="orange")

plt.yticks(range(len(a)), a, fontproperties=my_font)

plt.show()

直方图

from matplotlib import pyplot as plt, font_manager
import random

# 模拟随机数
a = [random.randint(80,120) for i in range(120)]

d = 5 # 组距
num_bins = (max(a)-min(a))//d

plt.hist(a, num_bins)

plt.xticks(range(min(a), max(a)+d, d))
plt.show()

常见问题总结

  • 应该选择那种图形来呈现数据
  • matplotlib.plot(x, y) 折线图
  • matplotlib.bar(x, y) 条形图
  • matplotlib.scatter(x, y) 散点图
  • matplotlib.hist(data, bins.normed) 直方图
  • xticks和yticks的设置
  • label和tittle.grid的设置
  • 绘制的大小和保存图片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值