簡體   English   中英

在matplotlib線周圍繪制邊框

[英]Draw a border around a matplotlib line

有沒有一種正確的方法來繪制邊框來勾勒出matplotlib圖?

到目前為止我發現的最好的是這個答案[ 1 ]和matplotlib教程[ 2 ],它使用matplotlib.patheffects為輪廓繪制稍微粗的筆划。

我的問題是,它打破了半透明的情節,如果你設置alpha < 1.0你會看到主要背后的完整筆划,而我想要一個真正的邊框。 有沒有辦法畫出真正的輪廓?

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patheffects as mpe

outline=mpe.withStroke(linewidth=8, foreground='black')

x = np.linspace(0, 2*np.pi, 1000)

plt.plot(x, np.sin(x), lw=5, color='red', path_effects=[outline],
         label="stroke no alpha")

plt.plot(x, np.sin(x-np.pi/3.), lw=5, alpha=0.5, color='red', path_effects=[outline],
         label="stroke with alpha")

plt.plot(x, np.sin(x-2*np.pi/3.), lw=5, alpha=0.5, color='red',
         label="no stroke with alpha")

plt.legend()
plt.show()

在此輸入圖像描述

有一種方法可以使用alpha繪制真正的邊框,因為在紅線下方不會看到較粗的黑線。 訣竅是繪制一條白線覆蓋黑線的不需要的部分,以便只留下邊界。

因此,“使用alpha的筆划”將改為:

pe1 = [mpe.Stroke(linewidth=8, foreground='black'),
       mpe.Stroke(foreground='white',alpha=1),
       mpe.Normal()]

plt.plot(x, np.sin(x-np.pi/3.), color='red', label="stroke with alpha", lw=5, 
alpha=0.5, path_effects=pe1)

產生以下情節:

行程

可以看出,這解決了具有邊框和沒有邊框之間的色差問題,但是防止看到下面的線條。

根據應用,白色層的alpha參數也可以設置為半透明值,以便在屏蔽黑線以繪制邊界並允許查看可能在下面的其他線之間實現折衷。 例如,以下path_effect:

pe1 = [mpe.Stroke(linewidth=8, foreground='black'),
       mpe.Stroke(foreground='white',alpha=0.6),
       mpe.Normal()]

收益率:

中風阿爾法

這是粉紅色與紅色和0.5相結合之間的一半,完全看到下面的黑線; 同時仍允許查看之前繪制的其他線條。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM