大家好,我是W
前言:本次练习要通过一篇不长不短的白话文章彻底了解matplotlib的几种图的用法和各种参数,也是对我这段时间的学习的总结。接下来学习的顺序是matplotlib的通用函数、柱状图(plt.bar)、直方图(plt.hist)、折线图(plt.plot)、散点图(plt.scatter)、柱状图与直方图区别、windows下显示中文设置、matplotlib流程总结。
matplotlib的几个通用函数及其常用参数
-
导入matplotlib
import matplotlib.pyplot as plt
-
设置画布(plt.figure())
fig = plt.figure(figsize=(20, 8), dpi=80,facecolor='blue') # figsize= :设置画布的长和高,传入参数为元祖(长,高) # dpi= :设置画布清晰度,越高文件越大,越清晰 # facecolor= :设置画布外围一圈的颜色
-
设置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= :第三个是标签旋转角度
-
保存图片(plt.savefig(filepath))
plt.savefig("../pic/pic1.png") # 不解释了
-
展示图片(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,今天的白话解读就到这里。