如何使用plt画出漂亮的柱状图(条形图)

1.配置环境

使用环境:python3.7
平台:Windows10
工具:matplotlib
IDE:PyCharm

2.效果图

优化后的图片:
在这里插入图片描述

优化前的图片:
在这里插入图片描述

3.绘图代码

# author:Hurricane
# date:  2021/11/12
# E-mail:hurri_cane@qq.com


from matplotlib import pyplot as plt
import random


def plot_bar_color(data, x, path="color.png"):
	# data:条形图数据
	# x:x轴坐标
	# path:图片保存路径

	# 创建颜色序列
	colors = []
	for _ in range(int(len(data) / 2)):
		colors.append([_ / int(len(data) / 2), 0.5, 0.5])
	colors = colors + colors[::-1]

	# 创建x轴显示的参数(此功能在与在图像中x轴仅显示能被10整除的刻度,避免刻度过多分不清楚)
	x_tick = list(map(lambda num: "" if num % 10 != 0 else num, x))

	# 创建一个分辨率为3000*1000的空白画布
	plt.figure(figsize=(300, 100), dpi=10)

	# 创建一个字体样式
	font2 = {'family': 'Times New Roman',
			 'weight': 'normal',
			 'size': 300, }

	# 设置x轴的说明
	plt.xlabel('Classes', font2)
	# 设置y轴的说明
	plt.ylabel('Number of data', font2)
	# 打开网格线
	plt.grid()
	# 绘制条形图
	plt.bar(range(len(data)), data, color=colors, width=0.5)
	# 显示x轴刻度
	plt.xticks(range(len(x_tick)), x_tick, size=200)
	# 显示y轴刻度
	plt.yticks(size=200)
	# 获取当前图像句柄
	fig = plt.gcf()
	# plt.show()
	# 存储当前图像
	fig.savefig(path)


def plot_bar_normal(data, x, path="normal.png"):
	# data:条形图数据
	# x:x轴坐标
	# path:图片保存路径

	# 创建x轴显示的参数(此功能在与在图像中x轴仅显示能被10整除的刻度,避免刻度过多分不清楚)
	x_tick = list(map(lambda num: "" if num % 10 != 0 else num, x))

	# 创建一个分辨率为3000*1000的空白画布
	plt.figure(figsize=(300, 100), dpi=10)

	# 设置x轴的说明
	plt.xlabel('Classes', size=300)
	# 设置y轴的说明
	plt.ylabel('Number of data', size=300)
	# 打开网格线
	plt.grid()
	# 绘制条形图
	plt.bar(range(len(data)), data,  width=0.5)
	# 显示x轴刻度
	plt.xticks(range(len(x_tick)), x_tick, size=200)
	# 显示y轴刻度
	plt.yticks(size=200)
	# 获取当前图像句柄
	fig = plt.gcf()
	# plt.show()
	# 存储当前图像
	fig.savefig(path)


if __name__ == '__main__':
	# 创建需要绘制的数据,本实例中为72个0到100的随机数
	data = [random.randint(0, 100) for _ in range(72)]
	# 创建x轴坐标
	x = list(range(0, 360, 5))
	# save_path = r"test.png"
	# 绘制彩色条形图并保存
	plot_bar_color(data, x)
	# 绘制普通条形图并保存
	plot_bar_normal(data, x)
	print("All Done!")



4.代码解释

在第三节给出的代码已经有了详细的注释,本节主要对关键部分进行讲解。
Python绘制柱状图相信大家并不陌生,采用plt.bar命令可很快完成。如果对该命令不了解的同学可以先参考一下此文章
https://blog.csdn.net/HangoverLG/article/details/106063835?
但是可以看到plt.bar绘制出来 的默认条形图颜色单一,本文的主要功能就是给条形图着色
在本文中可以看到,相较于未着色的图,就是在于这行代码,在绘制bar时,添加了颜色序列

	plt.bar(range(len(data)), data, color=colors, width=0.5)

那么颜色序列怎么创建呢?

	for _ in range(int(len(data) / 2)):
		colors.append([_ / int(len(data) / 2), 0.5, 0.5])
	colors = colors + colors[::-1]

通过上述代码可以轻松实现。本文为了达到颜色从中间分开对称的效果,所以采用创建一遍序列后,再将其反序和原始序列拼接。
如果你只想要产生单向渐变颜色的条形图的话,那么只需要这一行命令即可

colors = [[random.random() for _ in range(3)] for _ in range(len(data))]

5.结束语

如果本文对你有帮助的话还请点赞、收藏一键带走哦,你的支持是我最大的动力!(づ。◕ᴗᴗ◕。)づ
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐