前言
最近工作中遇到一个需求,在使用matplotlib生成图片,想要背景透明,而且图例部分也显示透明效果,通过查找相关资料找到了大概的设置方法,特此记录,方便自己或者有需要的朋友们参考学习。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# 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能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:http://blog.****.net/hfut_jf/article/details/52648033