2012-03-12 63 views
9

Tôi muốn biết làm thế nào để thay đổi màu sắc của các ve trong colorbar và làm thế nào để thay đổi màu chữ của tiêu đề và colorbar trong một con số. Ví dụ, mọi thứ rõ ràng có thể nhìn thấy trong temp.png nhưng không phải trong temp2.png:matplotlib: thay đổi tiêu đề và màu sắc văn bản và màu sắc đánh dấu

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") 

Cảm ơn

+1

tôi khuyên bạn nên nhìn vào việc này [câu hỏi cũ] (http://stackoverflow.com/questions/6485000/python-matplotlib-colorbar-setting -tick-formator-locator-changes-tick-label). – cosmosis

Trả lời

15

Điều này có thể được thực hiện bằng cách kiểm tra và thiết lập các thuộc tính cho xử lý đối tượng trong matplotlib.

tôi sửa mã của bạn và đặt một số lời giải thích trong bình luận:

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") 
+0

@ewyytomato: cảm ơn ... hoạt động tốt – ahmadh

2

Dựa trên câu trả lời trước tôi bổ sung thêm hai dòng để thiết lập màu hộp của colorbar và colorbar của bọ ve màu:

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") 
4

câu trả lời trước không đưa ra những gì tôi muốn. Đây là cách tôi đã làm nó:

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

Các vấn đề liên quan