Matplotlib: изменить заголовок и цвет текста и цвета галочки - PullRequest
17 голосов
/ 12 марта 2012

Я хотел знать, как изменить цвет галочек на цветовой панели и как изменить цвет шрифта заголовка и цветовой полосы на рисунке.Например, вещи явно видны в temp.png, но не в temp2.png:

import matplotlib.pyplot as plt
import numpy as np
from numpy.random import randn

fig = plt.figure()
data = np.clip(randn(250,250),-1,1)
cax = plt.imshow(data, interpolation='nearest')
plt.title('my random fig')
plt.colorbar()

# works fine
plt.savefig('temp.png')
# title and colorbar ticks and text hidden
plt.savefig('temp2.png', facecolor="black", edgecolor="none")

Спасибо

Ответы [ 4 ]

25 голосов
/ 12 марта 2012

Это можно сделать, проверив и установив свойства для обработчика объекта в matplotlib.

Я отредактировал ваш код и добавил несколько комментариев в комментарий:

import matplotlib.pyplot as plt
import numpy as np
from numpy.random import randn

fig = plt.figure()
data = np.clip(randn(250,250),-1,1)
cax = plt.imshow(data, interpolation='nearest')

title_obj = plt.title('my random fig') #get the title property handler
plt.getp(title_obj)                    #print out the properties of title
plt.getp(title_obj, 'text')            #print out the 'text' property for title
plt.setp(title_obj, color='r')         #set the color of title to red

axes_obj = plt.getp(cax,'axes')                 #get the axes' property handler
ytl_obj = plt.getp(axes_obj, 'yticklabels')     #get the properties for 
                                                #  yticklabels
plt.getp(ytl_obj)                               #print out a list of properties
                                                #  for yticklabels
plt.setp(ytl_obj, color="r")                    #set the color of yticks to red

plt.setp(plt.getp(axes_obj, 'xticklabels'), color='r') #xticklabels: same

color_bar = plt.colorbar()                            #this one is a little bit
cbytick_obj = plt.getp(color_bar.ax.axes, 'yticklabels')                #tricky
plt.setp(cbytick_obj, color='r')

plt.savefig('temp.png')
plt.savefig('temp2.png', facecolor="black", edgecolor="none")
8 голосов
/ 03 февраля 2017

Предыдущий ответ не дал того, что я хотел. Вот как я это сделал:

import matplotlib.pyplot as plt
import numpy as np
from numpy.random import randn
data = np.clip(randn(250,250),-1,1)
data = np.ma.masked_where(data > 0.5, data)


fig, ax1 = plt.subplots(1,1)

im = ax1.imshow(data, interpolation='nearest')
cb = plt.colorbar(im)

fg_color = 'white'
bg_color = 'black'

# IMSHOW    
# set title plus title color
ax1.set_title('ax1 title', color=fg_color)

# set figure facecolor
ax1.patch.set_facecolor(bg_color)

# set tick and ticklabel color
im.axes.tick_params(color=fg_color, labelcolor=fg_color)

# set imshow outline
for spine in im.axes.spines.values():
    spine.set_edgecolor(fg_color)    

# COLORBAR
# set colorbar label plus label color
cb.set_label('colorbar label', color=fg_color)

# set colorbar tick color
cb.ax.yaxis.set_tick_params(color=fg_color)

# set colorbar edgecolor 
cb.outline.set_edgecolor(fg_color)

# set colorbar ticklabels
plt.setp(plt.getp(cb.ax.axes, 'yticklabels'), color=fg_color)

fig.patch.set_facecolor(bg_color)    
plt.tight_layout()
plt.show()
#plt.savefig('save/to/pic.png', dpi=200, facecolor=bg_color)

black on white imshow

2 голосов
/ 15 октября 2014

Основываясь на предыдущем ответе, я добавил две строки, чтобы установить цвет поля цветовой полосы и цвет тиков цветовой полосы:

import matplotlib.pyplot as plt
import numpy as np
from numpy.random import randn

fig = plt.figure()
data = np.clip(randn(250,250),-1,1)
cax = plt.imshow(data, interpolation='nearest')

title_obj = plt.title('my random fig') #get the title property handler
plt.setp(title_obj, color='w')         #set the color of title to white

axes_obj = plt.getp(cax,'axes')                        #get the axes' property handler
plt.setp(plt.getp(axes_obj, 'yticklabels'), color='w') #set yticklabels color
plt.setp(plt.getp(axes_obj, 'xticklabels'), color='w') #set xticklabels color

color_bar = plt.colorbar()                            
plt.setp(plt.getp(color_bar.ax.axes, 'yticklabels'), color='w') # set colorbar  
                                                                # yticklabels color
##### two new lines ####
color_bar.outline.set_color('w')                   #set colorbar box color
color_bar.ax.yaxis.set_tick_params(color='w')      #set colorbar ticks color 
##### two new lines ####

plt.setp(cbytick_obj, color='r')
plt.savefig('temp.png')
plt.savefig('temp3.png', facecolor="black", edgecolor="none")
1 голос
/ 08 июня 2018

В то время как другие ответы, безусловно, верны, кажется, что это легче решить, используя стили или специфические rcParams, или используя tick_params функцию

Стили

Matplotlib обеспечивает стиль dark_background. Вы можете использовать его, например, через plt.style.use("dark_background"):

import matplotlib.pyplot as plt
import numpy as np

plt.style.use("dark_background")

fig = plt.figure()
data = np.clip(np.random.randn(150,150),-1,1)
plt.imshow(data)
plt.title('my random fig')
plt.colorbar()  

plt.savefig('temp2.png', facecolor="black", edgecolor="none")
plt.show()

enter image description here

Или, если вам нужно создать одну и ту же фигуру с черным фоном и без него, в контексте могут быть использованы стили.

import matplotlib.pyplot as plt
import numpy as np

def create_plot():
    fig = plt.figure()
    data = np.clip(np.random.randn(150,150),-1,1)
    plt.imshow(data)
    plt.title('my random fig')
    plt.colorbar()
    return fig

# create white background plot
create_plot()
plt.savefig('white_bg.png')

with plt.style.context("dark_background"):
    create_plot()
    plt.savefig('dark_bg.png', facecolor="black", edgecolor="none")

Подробнее об этом можно узнать из учебника по настройке matplotlib .

Конкретные rcParams

Вы можете индивидуально установить необходимые rcParams , которые составляют стиль, где это необходимо в вашем скрипте.

например. сделать любой текст синим и yticks красным:

params = {"text.color" : "blue",
          "xtick.color" : "crimson",
          "ytick.color" : "crimson"}
plt.rcParams.update(params)

Это также автоматически раскрасит отметки.

enter image description here

Настройка галочек и меток

Вы также можете индивидуально настроить объекты на графике. Для тиков и ярлыков существует метод tick_params. Например. чтобы сделать галочки только красного цвета,

cbar = plt.colorbar()
cbar.ax.tick_params(color="red", width=5, length=10)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...