2010-08-29 24 views
15

Trong matplotlib, dòng sẽ tự động vẽ chu trình màu. Hai ô này sẽ có màu sắc khác nhau.Làm cách nào để làm cho các ô bar tự động chuyển qua các màu khác nhau?

axes.plot(x1, y) 
axes.plot(x2, y) 

Tuy nhiên, ô biểu đồ thì không. Cả hai chuỗi dữ liệu này sẽ có thanh màu xanh.

axes.bar(x1, y) 
axes.bar(x2, y) 

Làm cách nào để tạo chu kỳ ô tự động trên một nhóm màu được xác định trước?

Trả lời

4

Tùy chọn: Để có được toàn quyền kiểm soát các phong cách của các nhân vật của bạn sử dụng một mplstyle hiện có làm mẫu: https://github.com/matplotlib/matplotlib/tree/master/lib/matplotlib/mpl-data/stylelib

điều chỉnh các tham số: axes.prop_cycle: chu trình ('màu', [. ...])

tải phong cách của bạn:

from matplotlib import style 
style.use ('PATH TO YOUR MPL STYLE') 

Bạn có thể lướt qua hầu hết hoặc phong cách mặc định chu kỳ màu bất kỳ cách nào bạn muốn:

#!/usr/bin/python 
import matplotlib.pyplot as plt 

#data 
x=[1,2,4] 
y=[11,12,8] 
prop_iter = iter(plt.rcParams['axes.prop_cycle']) 

for i in range(0,len(x)): 
    plt.bar(x[i],y[i],color=next(prop_iter)['color']) 

plt.show() 

plt.rcParams [ 'axes.prop_cycle'] lấy tất cả các chu kỳ, do đó bạn cần phải chọn chu trình đúng bằng phím ['màu'].

Bạn có thể thả tạo iterator và sử dụng danh sách hiểu và zip để tạo ra một lớp lót:

#!/usr/bin/python 
import matplotlib.pyplot as plt 

x=[1,2,4] 
y=[11,12,8] 
prop = plt.rcParams['axes.prop_cycle'] 
[plt.bar(param[0],param[1],color=param[2]['color']) for param in zip(x,y,prop)] 
plt.show() 

enter image description here

3

Từ tài liệu tại http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.bar

Các lô thanh không màu chu kỳ tự động nhưng bạn có thể thiết lập các màu trực tiếp bằng cách thông qua các thuộc tính màu sắc. Một cái gì đó như thế này:

colors = ['red', 'blue', 'green'] 
i = -1 
def getCycledColor(): 
    global i, colors 
    if i < len(colors) -1 
     i = i + 1 
     return colors[i] 
    else: 
     i = -1 
axes.bar(x1,y,facecolor=getCycledColor()) 
axes.bar(x2,y,facecolor=getCycledColor()) 

Màu sắc có thể được chọn từ danh sách được xác định trước và quay vòng.

+0

mà chỉ sản xuất hai lô quầy bar, một với tất cả các thanh màu đỏ và một với tất cả các thanh màu xanh (bởi vì 'getCycledColor()' chỉ được gọi một lần khi 'axes(). bar (..)' được gọi) –

24

Điều gì đó dọc theo những dòng này có phù hợp với bạn không?

#!/usr/bin/python 
from matplotlib import cm 
import matplotlib.pyplot as plt 

#data 
x=[1,2,4] 
y=[11,12,8] 

for i in range(0,len(x)): 
    plt.bar(x[i],y[i],color=cm.jet(1.*i/len(x))) 

plt.show() 

Thông tin thêm về colormaps.

CHỈNH SỬA: Xem this example để biết cách quay vòng qua một nhóm màu được xác định trước.

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