2015-04-01 18 views
6

Tôi đã tải một hình ảnh vào một mảng numpy bằng cách sử dụng mahotas.matplotlib 3D scatterplot với điểm đánh dấu màu tương ứng với giá trị RGB

import mahotas 
img = mahotas.imread('test.jpg') 

Mỗi pixel trong img được biểu diễn bởi một mảng các giá trị RGB:

img[1,1] = [254, 200, 189] 

Tôi đã thực hiện một phân tán 3D của các giá trị R trên một trục, giá trị G trên trục và B giá trị thứ 2 trên trục thứ ba. Đây không phải là vấn đề:

fig = plt.figure() 
ax = fig.add_subplot(111, projection = '3d') 
for i in range(1,img.shape[1]+1): 
    xs = img[i,1][0] 
    ys = img[i,1][1] 
    zs = img[i,1][2] 
    ax.scatter(xs, ys, zs, c='0.5', marker='o') 
ax.set_xlabel('X Label') 
ax.set_ylabel('Y Label') 
ax.set_zlabel('Z Label') 

plt.show() 

(Tôi chỉ vẽ sơ đồ cột đầu tiên của hình ảnh trong thời gian này).

Làm cách nào để tô màu cho mỗi chấm phân tán theo màu của mỗi pixel hình ảnh? tức là tôi đoán tôi muốn tô màu các chấm theo giá trị RGB của chúng, nhưng tôi không chắc liệu điều này có khả thi không?

Trả lời

11

Có, bạn có thể làm điều này, nhưng nó cần phải được thực hiện thông qua một cơ chế riêng biệt hơn đối số c. Tóm lại, sử dụng facecolors=rgb_array.


Trước hết, hãy để tôi giải thích những gì đang xảy ra. Các Collection rằng lợi nhuận scatter có hai "hệ thống" (vì thiếu một thuật ngữ tốt hơn) để thiết lập màu sắc.

Nếu bạn sử dụng đối số c, bạn sẽ đặt màu sắc thông qua hệ thống "ScalarMappable". Điều này quy định rằng các màu phải được kiểm soát bằng cách áp dụng một bản đồ màu cho một biến duy nhất. (Đây là phương pháp set_array của bất kỳ thứ gì được kế thừa từ ScalarMappable.)

Ngoài hệ thống ScalarMappable, màu sắc của bộ sưu tập có thể được đặt độc lập. Trong trường hợp đó, bạn sẽ sử dụng số facecolors kwarg.


màu rgb Như một ví dụ nhanh, những điểm này sẽ có chỉ định ngẫu nhiên:

import matplotlib.pyplot as plt 
import numpy as np 

x, y = np.random.random((2, 10)) 
rgb = np.random.random((10, 3)) 

fig, ax = plt.subplots() 
ax.scatter(x, y, s=200, facecolors=rgb) 
plt.show() 

enter image description here

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