有数值的条形图图片是5张,没数值的图片是2+15=17张 。

文章插图
GIF结束段,添加了15帧空白图片 。所以在结束的时候会显示一段时间的空白 。
可以设置一下条形图当前位置到下个位置的速度,让过渡变得平滑 。
将当前位置和下一个位置之间的距离除以过渡帧数 。
n_frames = 10x = [1, 2, 3, 4, 5]coordinates_lists = [[0, 0, 0, 0, 0], [10, 30, 60, 30, 10], [70, 40, 20, 40, 70], [10, 20, 30, 40, 50], [50, 40, 30, 20, 10], [75, 0, 75, 0, 75], [0, 0, 0, 0, 0]]print('生成图表n')filenames = []for index in np.arange(0, len(coordinates_lists) - 1): # 获取当前图像及下一图像的y轴坐标值 y = coordinates_lists[index] y1 = coordinates_lists[index + 1] # 计算当前图像与下一图像y轴坐标差值 y_path = np.array(y1) - np.array(y) for i in np.arange(0, n_frames + 1): # 分配每帧的y轴移动距离 # 逐帧增加y轴的坐标值 y_temp = (y + (y_path / n_frames) * i) # 绘制条形图 plt.bar(x, y_temp) plt.ylim(0, 80) # 保存每一帧的图像 filename = f'images/frame_{index}_{i}.png' filenames.append(filename) # 最后一帧重复,画面停留一会 if (i == n_frames): for i in range(5): filenames.append(filename) # 保存图片 plt.savefig(filename) plt.close()print('保存图表n')# 生成GIFprint('生成GIFn')with imageio.get_writer('mybars.gif', mode='I') as writer: for filename in filenames: image = imageio.imread(filename) writer.append_data(image)print('保存GIFn')print('删除图片n')# 删除图片for filename in set(filenames): os.remove(filename)print('完成')看起来是平滑了许多 。
文章插图
好了,接下来我们更改一下图表相关的配置参数,让图表变得好看 。
n_frames = 10bg_color = '#95A4AD'bar_color = '#283F4E'gif_name = 'bars'x = [1, 2, 3, 4, 5]coordinates_lists = [[0, 0, 0, 0, 0], [10, 30, 60, 30, 10], [70, 40, 20, 40, 70], [10, 20, 30, 40, 50], [50, 40, 30, 20, 10], [75, 0, 75, 0, 75], [0, 0, 0, 0, 0]]print('生成图表n')filenames = []for index in np.arange(0, len(coordinates_lists) - 1): y = coordinates_lists[index] y1 = coordinates_lists[index + 1] y_path = np.array(y1) - np.array(y) for i in np.arange(0, n_frames + 1): y_temp = (y + (y_path / n_frames) * i) # 绘制条形图 fig, ax = plt.subplots(figsize=(8, 4)) ax.set_facecolor(bg_color) plt.bar(x, y_temp, width=0.4, color=bar_color) plt.ylim(0, 80) # 移除图表的上边框和右边框 ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False) # 设置虚线网格线 ax.set_axisbelow(True) ax.yaxis.grid(color='gray', linestyle='dashed', alpha=0.7) # 保存每一帧的图像 filename = f'images/frame_{index}_{i}.png' filenames.append(filename) # 最后一帧重复,画面停留一会 if (i == n_frames): for i in range(5): filenames.append(filename) # 保存图片 plt.savefig(filename, dpi=96, facecolor=bg_color) plt.close()print('保存图表n')# 生成GIFprint('生成GIFn')with imageio.get_writer(f'{gif_name}.gif', mode='I') as writer: for filename in filenames: image = imageio.imread(filename) writer.append_data(image)print('保存GIFn')print('删除图片n')# 删除图片for filename in set(filenames): os.remove(filename)print('完成')
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 音视频算法在淘宝中的应用
- 李隆基之子谁当皇帝,李隆基的哪个儿子继位了
- 卫子夫是谁的皇后,卫子夫做了多少年皇后
- 戴什么耳机损伤最小?耳机科学使用指南来了
- 快手小店微信小商店等电商平台如何使用菜鸟打印电子面单
- 氟轻松软膏的作用与功效,醋酸氟轻松软膏的功效作用有哪些
- 5G工业路由器在工业物联网场景的通信应用
- 肝不好喝菊花枸杞茶有用吗,黄芪菊花枸杞茶的功效
- 菊花茶喝多了会怎么样,藏红花泡水放多了会怎么样
- 可以祛痘的茶,喝茶可以排毒祛痘
