python如何使用plt画出漂亮的柱状图(条形图)
如何使用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.结束语
如果本文对你有帮助的话还请点赞、收藏一键带走哦,你的支持是我最大的动力!(づ。◕ᴗᴗ◕。)づ
来源:Hurri_cane