白话解读matplotlib用法-通用函数和柱状图

大家好,我是W

前言:本次练习要通过一篇不长不短的白话文章彻底了解matplotlib的几种图的用法和各种参数,也是对我这段时间的学习的总结。接下来学习的顺序是matplotlib的通用函数、柱状图(plt.bar)、直方图(plt.hist)、折线图(plt.plot)、散点图(plt.scatter)、柱状图与直方图区别、windows下显示中文设置、matplotlib流程总结。

matplotlib的几个通用函数及其常用参数

  1. 导入matplotlib

     import matplotlib.pyplot as plt
    
  2. 设置画布(plt.figure())

     fig = plt.figure(figsize=(20, 8), dpi=80,facecolor='blue') 
     # figsize= :设置画布的长和高,传入参数为元祖(长,高) 
     # dpi= :设置画布清晰度,越高文件越大,越清晰
     # facecolor= :设置画布外围一圈的颜色
    
  3. 设置x轴下方的下标(plt.xticks())

     源码的解释是:Get or set the current tick locations and labels of the x-axis.
     即设置或获取当前刻度的位置和x轴的标签
     白话解释:我们花坐标轴会有x,y轴,x轴下方会画刻度,刻度下面可能还要写数字
     matplotlib会把刻度和字分开来,传入一个列表做为刻度的位置(单增),另一个列表作为标签
    
    
    
     a = ["战狼2", "速度与激情8", "功夫瑜伽", "西游伏妖篇", "变形金刚5:最后的骑士", "摔跤吧!爸爸", "加勒比海盗5:死无对证", "金刚:骷髅岛", "极限特工:终极回归", "生化危机6:终章",
     "乘风破浪", "神偷奶爸3", "智取威虎山", "大闹天竺", "金刚狼3:殊死一战", "蜘蛛侠:英雄归来", "悟空传", "银河护卫队2", "情圣", "新木乃伊", ]
     _x = range(len(a))
     plt.xticks(ticks=_x, labels=a, rotation=45)
     # ticks= :第一个参数画布的标签放置的位置
     # labels= :第二个参数是标签
     # rotation= :第三个是标签旋转角度
    
  4. 保存图片(plt.savefig(filepath))

     plt.savefig("../pic/pic1.png")
     # 不解释了
    
  5. 展示图片(plt.show())

     plt.show()
    

柱状图(plt.bar())

使用场景:

适合用于展示二维的数据集,数据分布情况,其中一轴展示需要对比的维度,另一轴展示对应的数值。

比如:用于展示不同小区的平均房价,x轴标签为不同小区,y轴为对应价格。用于展示不同年份中国人口数量,x轴为年份,y轴为数量。

实例讲解(代码复制可用)

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文
plt.rcParams['axes.unicode_minus'] = False  # 显示负号

# 打开画布 figsize=(20,8)设置画布20*8大小 dpi=80设置画布清晰度 facecolor=‘yellow’设置画布外围一圈为黄色
fig = plt.figure(figsize=(20, 8), dpi=80, facecolor='pink')

# x轴标签名
x_labels = ["战狼2", "速度与激情8", "功夫瑜伽", "西游伏妖篇", "变形金刚5:最后的骑士", "摔跤吧!爸爸", "加勒比海盗5:死无对证", "金刚:骷髅岛", "极限特工:终极回归", "生化危机6:终章",
            "乘风破浪", "神偷奶爸3", "智取威虎山", "大闹天竺", "金刚狼3:殊死一战", "蜘蛛侠:英雄归来", "悟空传", "银河护卫队2", "情圣", "新木乃伊", ]
# y轴数值
y = [56.01, 26.94, 17.53, 16.49, 15.45, 12.96, 11.8, 11.61, 11.28, 11.12, 10.49, 10.3, 8.75, 7.55, 7.32, 6.99, 6.88,
     6.86, 6.58, 6.23]

# 刻度列表 [0,1,2...19]
x_ticks = range(len(x_labels))

# x=:表示柱状图中的柱子的位置
# height=:表示每个柱子的高
# width=:表示每个柱子的宽
# alpha=:表示柱子的透明度,从0到1,越小越透
# color=:表示柱子的颜色
# edgecolor=:表示柱子外围的线的颜色
plt.bar(x=x_ticks, height=y, width=0.2, alpha=0.8, color='green', edgecolor='red')

# ticks=:表示画布的标签放置的位置[0,1,2...19]
# labels=:表示画布的标签
# rotation=:表示标签旋转的角度
plt.xticks(ticks=x_ticks, labels=x_labels, rotation=45)

plt.show()

通过上例我们可以得到:
在这里插入图片描述

真的丑,所以颜色什么的参数最好不要乱设置,保持默认就可以了,最多设置一下柱子的颜色。
接下来,我们来看看标签和柱子不对应是什么情况:

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文
plt.rcParams['axes.unicode_minus'] = False  # 显示负号

fig = plt.figure(figsize=(20, 8), dpi=80, facecolor='pink')

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

x_ticks = range(len(x_labels))

# 增加一个刻度列表2,这个刻度列表2是正常刻度列表 * 2
x_ticks2 = []
for i in x_ticks:
    x_ticks2.append(i * 2)

# 我们将刻度列表2放在bar的x=参数上,意味着我们改变了每个柱子的位置,使其变为原来位置的两倍
plt.bar(x=x_ticks2, height=y, width=0.2, alpha=0.8, color='green', edgecolor='red')

# 保持下标的位置不动
plt.xticks(ticks=x_ticks, labels=x_labels, rotation=45)

plt.show()

这时我们得到的图是:
在这里插入图片描述

实际上坐标轴由大概20个刻度变化为了40个刻度,所以标签还是[0,1,2…,19]而柱子的位置变为了[0,2,4,…,40]

接下来我们需要将柱子横过来,因为还有两个api没有讲:

plt.barh(y=x_ticks, height=0.2, width=y, color='orange')
# 对应plt.bar的柱子垂直与x轴,plt.barh的柱子垂直于y轴
# y=:表示柱子的位置,类型为数值型列表
# height=:与bar不同,barh的height和width要倒过来,height表示柱子从上到下的宽度,因为柱子横过来了,他的宽用的是y轴来衡量
# width=:width表示柱子的长度,类型位数值型列表	

plt.yticks(ticks=x_ticks, labels=x_labels)
# 两个参数与xticks一模一样

接下来的代码是实现柱子横过来:

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文
plt.rcParams['axes.unicode_minus'] = False  # 显示负号

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

# x轴标签名
x_labels = ["战狼2", "速度与激情8", "功夫瑜伽", "西游伏妖篇", "变形金刚5:最后的骑士", "摔跤吧!爸爸", "加勒比海盗5:死无对证", "金刚:骷髅岛", "极限特工:终极回归", "生化危机6:终章",
            "乘风破浪", "神偷奶爸3", "智取威虎山", "大闹天竺", "金刚狼3:殊死一战", "蜘蛛侠:英雄归来", "悟空传", "银河护卫队2", "情圣", "新木乃伊", ]
# y轴数值
y = [56.01, 26.94, 17.53, 16.49, 15.45, 12.96, 11.8, 11.61, 11.28, 11.12, 10.49, 10.3, 8.75, 7.55, 7.32, 6.99, 6.88,
     6.86, 6.58, 6.23]

x_ticks = range(len(x_labels))

plt.barh(y=x_ticks, height=0.2, width=y, color='orange')
plt.yticks(ticks=x_ticks, labels=x_labels)

plt.show()

效果图:
在这里插入图片描述
ok,今天的白话解读就到这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值