2
我想寫一個函數來自動放置在我的數字右下角的水印。這是我迄今的功能。Matplotlib自動放置水印
from PIL import Image
import matplotlib.pyplot as plt
def watermark(fig, ax):
""" Place watermark in bottom right of figure. """
# Get the pixel dimensions of the figure
width, height = fig.get_size_inches()*fig.dpi
# Import logo and scale accordingly
img = Image.open('logo.png')
wm_width = int(width/4) # make the watermark 1/4 of the figure size
scaling = (wm_width/float(img.size[0]))
wm_height = int(float(img.size[1])*float(scaling))
img = img.resize((wm_width, wm_height), Image.ANTIALIAS)
# Place the watermark in the lower right of the figure
xpos = ax.transAxes.transform((0.7,0))[0]
ypos = ax.transAxes.transform((0.7,0))[1]
plt.figimage(img, xpos, ypos, alpha=.25, zorder=1)
問題是,當我向任一軸添加標籤時,水印的位置發生變化。例如。顯着增加ax.set_xlabel('x-label', rotation=45)
改變水印位置。這似乎是這種情況,因爲水印的放置與整個圖形相關(例如繪圖和軸線區域),然而函數get_size_inches()僅計算繪圖區域(例如不包括軸線區域)。
有無論如何獲得整個圖形的像素尺寸(例如包括軸區域)或其他簡單的解決方法。
在此先感謝。
好極了!如果您想要每個子圖都有一個水印,請根據子圖大小縮放圖像,即「width = ax.bbox.xmax - ax.bbox.xmin」 – sfinkens
@Funkensieper如果您想讓水印填充完整的軸,你可以使用圖像的「ax.imshow」圖,並設置你喜歡的zorder和alpha。 – ImportanceOfBeingErnest
不,我希望水印是每個子圖的1/4。:) – sfinkens