Python matplotlib实现图片背景与图例全透明
本文介绍如何在Python中使用matplotlib库生成背景透明且图例透明的图片。通过设置savefig参数及图例框架属性,可实现背景与图例区域的透明效果,适用于需要叠加显示或去除白边的场景。
前言
近期在工作中遇到一个具体需求:在使用matplotlib生成图片时,需要实现图片背景透明,同时图例部分也呈现透明效果。经过查阅相关资料,找到了相应的设置方法,在此记录分享,供自己回顾或供有类似需求的开发者参考学习。
示例代码
# coding=utf-8
# matplotlib背景透明示例图
# python 3.5
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl
import scipy.stats as stats
# 设置中文字体
mpl.rcParams['font.sans-serif'] = ['SimHei']
def autolabel(rects):
# attach some text labels
for rect in rects:
height = rect.get_height()
# 设置标注文字及位置
ax.text(rect.get_x() + rect.get_width() / 2, 0.03 + height, '%.4f' % height, ha='center', va='bottom')
# 数据
testData = [[0.87, 0.40, 0.56],
[0.97, 0.50, 0.33],
[0.88, 0.30, 0.44],
[0.25, 0.23, 0.17],
[0.73, 0.33, 0.45]]
N = 3
width = 0.5
ind = np.arange(width, width*6*N, width*6)
fig, ax = plt.subplots()
rectsTest1 = ax.bar(ind, (testData[0][0], testData[0][1], testData[0][2]), width, color=(0, 0, 1, 1), edgecolor=(0, 0, 1, 1))
rectsTest2 = ax.bar(ind + width, (testData[1][0], testData[1][1], testData[1][2]), width, color=(1, 0, 0, 1), edgecolor=(1, 0, 0, 1))
rectsTest3 = ax.bar(ind + 2*width, (testData[2][0], testData[2][1], testData[2][2]), width, color=(0, 1, 0, 1), edgecolor=(0, 1, 0, 1))
rectsTest4 = ax.bar(ind + 3*width, (testData[3][0], testData[3][1], testData[3][2]), width, color=(1, 0.6471, 0, 1), edgecolor=(1, 0.6471, 0, 1))
rectsTest5 = ax.bar(ind + 4*width, (testData[4][0], testData[4][1], testData[4][2]), width, color=(0.5804, 0, 0.8275, 1), edgecolor=(0.5804, 0, 0.8275, 1))
ax.set_xlim(0, 9.5)
ax.set_ylim(0, 1.4)
ax.set_ylabel('数值')
ax.yaxis.grid(True)
ax.set_xticks(ind + width * 2.5)
ax.set_xticklabels(('P', 'R', 'F'))
# 设置图例
legend = ax.legend((rectsTest1, rectsTest2, rectsTest3, rectsTest4, rectsTest5), ('test1', 'test2', 'test3', 'test4', 'test5'))
frame = legend.get_frame()
frame.set_alpha(1)
frame.set_facecolor('none') # 设置图例legend背景透明
# 给每个数据矩形标注数值
autolabel(rectsTest1)
autolabel(rectsTest2)
autolabel(rectsTest3)
autolabel(rectsTest4)
autolabel(rectsTest5)
plt.savefig('C:/Users/XX/Desktop/test.png', format='png', bbox_inches='tight', transparent=True, dpi=600) # bbox_inches='tight'
图片边界空白紧致,背景透明
由于网页展示限制,透明效果可能无法直接体现,但此处仍附上生成的图片供参考。

总结
以上就是本文的全部内容,希望本文的内容对大家学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对本站的支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









