[英]Python: Changing Marker Type in Seaborn
在常規matplotlib中,您可以為圖表指定各種標記樣式。 但是,如果我導入seaborn
,'+'和'x'樣式停止工作並導致圖表不顯示 - 其他標記類型,例如'o','v'和'*'工作。
簡單的例子:
import matplotlib.pyplot as plt
import seaborn as sns
x_cross = [768]
y_cross = [1.028e8]
plt.plot(x_cross, y_cross, 'ok')
plt.gca().set_xlim([10, 1e4])
plt.gca().set_ylim([1, 1e18])
plt.xscale('log')
plt.yscale('log')
plt.show()
產生這個: 簡單的Seaborn Plot
但是,將第6行的'ok'更改為'+ k',不再顯示繪制的點。 如果我不進口seaborn
它可以正常工作: 使用十字標記的常規繪圖
當seaborn
使用seaborn
時,有人可以告訴我如何將標記樣式更改為交叉類型嗎?
這種行為的原因是seaborn將標記邊緣寬度設置為零。 (見來源 )。
正如在seaborn已知問題中所指出的那樣
matplotlib標記樣式如何工作的一個令人遺憾的結果是,當默認的seaborn樣式生效時,線條藝術標記(例如
"+"
)或facecolor
設置為"none"
標記將是不可見的。 這可以通過在函數調用中使用不同的markeredgewidth
(別名為mew
)來更改,或者在rcParams中全局使用。
在這種情況下,解決方案是將市場寬度設置為大於零的值,
使用rcParams(導入seaborn后):
plt.rcParams["lines.markeredgewidth"] = 1
使用markeredgewidth
或mew
關鍵字參數
plt.plot(..., mew=1)
但是,正如@mwaskom在評論中指出的那樣,實際上還有更多內容。 在這個問題中 ,有人認為標記應該分為兩類,批量樣式標記和線條藝術標記。 這已在matplotlib 2.0版中部分完成,您可以使用marker="P"
獲得“plus”作為標記,即使markeredgewidth=0
,此標記也可見。
plt.plot(x_cross, y_cross, 'kP')
這很像是一個bug。 但是,您可以通過mew
關鍵字設置標記邊緣線寬以獲得所需內容:
import matplotlib.pyplot as plt
import seaborn as sns
x_cross = [768]
y_cross = [1.028e8]
# set marker edge line width to 0.5
plt.plot(x_cross, y_cross, '+k', mew=.5)
plt.gca().set_xlim([10, 1e4])
plt.gca().set_ylim([1, 1e18])
plt.xscale('log')
plt.yscale('log')
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.