2017-07-07 31 views
3

是否有可能知道當前matplotlib樣式的名稱?我知道我可以使用plt.style.available獲得所有可用樣式的列表,但我想要的是可以獲取當前正在使用的樣式的名稱。我在Spyder的python 3.5的ipython控制檯工作,但如果回答這個問題取決於我的工作環境,我會感到驚訝:)如何找到matplotlib樣式名稱?

回答

1

看着the source of plt.style.use,我沒有看到任何使用新風格做任何事情來存儲正在使用的風格的名稱。

我想到了手動檢查當前rcParams對每一個可用的風格,這樣的事情:

import matplotlib.pyplot as plt 

for style in plt.style.available: 
    for key in plt.style.library[style]: 
     if plt.rcParams[key] != plt.style.library[style][key]: 
      break 
    else: 
     print('Current style is consistent with {}.'.format(style)) 

但沒有爲我的默認樣式匹配可用樣式。然後,我也印錯配的原因:第二項

Discarding style seaborn-paper: 0.6 vs 0.4 for key xtick.minor.width 
Discarding style seaborn-whitegrid: w vs white for key figure.facecolor 
Discarding style seaborn-talk: 0.8 vs 1.3 for key grid.linewidth 

注:輸出

for style in plt.style.available: 
    for key in plt.style.library[style]: 
     val_now,val_style = plt.rcParams[key],plt.style.library[style][key] 
     if val_now != val_style: 
      print('Discarding style {}: {} vs {} for key {}'.format(style,val_now,val_style,key)) 
      break 
    else: 
     print('Current style is consistent with {}.'.format(style)) 

部分w VS white。現在這是一個問題。命名的顏色不容易通過不同的名稱或RGBA值等同於相同的顏色。

然後我想到了使用matplotlib.colors.to_rgba()轉換每種顏色,但是如果您想要正確地執行此操作,則需要完全解析參數,包括像這樣的寶石:

Discarding style grayscale: figure.facecolor,w vs figure.facecolor,0.75 

即使後者的值對應白色,我們需要先分析該值並找到埋藏着裏面的顏色。

對我來說,唯一的安全實現似乎是讓plt.style.use在某處存儲樣式的名稱。但是,如果手動更改了rcParams中的任何內容,會發生什麼情況?那麼不會有這是一種當前加載的樣式。這是反對存儲樣式名稱的反駁。每當參數發生變化時,都必須進行檢查,使最後的plt.style.use調用的樣式名稱失效。我不確定你的問題有明顯的解決方案。