簡體   English   中英

Python:改變Seaborn中的標記類型

[英]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 
  • 使用markeredgewidthmew關鍵字參數

     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.

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