2015-05-04 15 views
5

Khi tôi sử dụng chức năng điền hoặc viscircles để vẽ vòng tròn với nền tới ô, trong hình nó xuất hiện trên đầu ô, như đã định, nhưng sau khi lưu dưới dạng jpg hoặc png, nền di chuyển xuống cuối cốt truyện và không hiển thị nữa.Di chuyển nền điền xuống dưới cùng sau khi lưu thành jpg

enter image description here

Làm cách nào để khắc phục sự cố này?

lưu ý: không phải vì màu trắng là màu trong suốt. Tôi đã thử màu xám, tôi đã thử màu đỏ, cả hai đều hoạt động giống như màu trắng.

+0

Bạn đã thử ['export_fig'] (http://www.mathworks.com/matlabcentral/fileexchange/23629-export-fig)? Nó cho phép bạn lưu các con số gần hơn với cách chúng được hiển thị. –

+0

@ Dev-iL, tôi đã thử nó ngay bây giờ và nó có cùng một vấn đề. – user50222

+0

Bạn có thể tải lên tệp '.fig' ở đâu đó không? Tôi có thể làm điều gì đó với nó .... –

Trả lời

3

Hãy xem xét ví dụ sau đây (được thực hiện trên MATLAB 2015a):

figure(); h=cell(1); 
%% viscircles method: 
subplot(1,2,1); 
plot([0 1],[0,1]); set(gca,'Color',0.8*[1 1 1]); axis square; 
h{1} = viscircles([0.5,0.5], 0.1,'EdgeColor','k','DrawBackgroundCircle',false); 
get(h{1},'Children') 

%// Line with properties: 
%// 
%//    Color: [0 0 0] 
%//   LineStyle: '-' 
%//   LineWidth: 2 
%//    Marker: 'none' 
%//   MarkerSize: 6 
%// MarkerFaceColor: 'none' 
%//    XData: [1x182 double] 
%//    YData: [1x182 double] 
%//    ZData: [1x0 double] 

%% Annotation method: 
subplot(1,2,2); 
plot([0 1],[0,1]); set(gca,'Color',0.8*[1 1 1]); axis square; 
pos = get(gca,'position'); 
h{2} = annotation('ellipse',[pos(1)+pos(3)*0.5 pos(2)+pos(4)*0.5 0.1 0.1],... 
        'FaceColor','w') 
%// Ellipse with properties: 
%// 
%//  Color: [0 0 0] 
%// FaceColor: [1 1 1] 
%// LineStyle: '-' 
%// LineWidth: 0.5000 
%//  Position: [0.7377 0.5175 0.1000 0.1000] 
%//  Units: 'normalized' 

Khi lưu đầu ra để .jpg tôi nhận được kết quả sau (đó là giống với bản xem trước trong hình vẽ):

Comparison of two circle-drawing methods

Thông báo thuộc tính FaceColor trong ô mã thứ 2, không có trong đối tượng thứ nhất. Vấn đề có vẻ là hàm viscircles mà bạn đã sử dụng không được vẽ hình dạng với nền, thay vào đó, nó vẽ một đường thẳng. Tôi không rõ vì sao bạn thấy bản xem trước theo cách bạn làm (tức là với nền).

Sidenote: tùy chọn 'DrawBackgroundCircle' cho viscircles chỉ vẽ một số nền trắng cho đường viền.

Bạn nên thử một số cách khác để vẽ vòng tròn đầy, chẳng hạn như:

  • Sử dụng annotation đối tượng như trong ví dụ của tôi ở trên. Lưu ý rằng những yêu cầu bạn cung cấp tọa độ trong figure đơn vị (và không trục!).
  • Sử dụng filled polygons:

    N=20; c=[0.5,0.5]; r=0.1; color = [1 1 1]; 
    t = 2*pi/N*(1:N); 
    hold all; fill(c(1)+r*cos(t), c(2)+r*sin(t), color); 
    

    [đoạn dựa trên a comment of this submission]

  • Vẽ với các dấu hiệu khổng lồ:

    plot(0.5,0.5,'.r','MarkerSize',70); 
    

    hoặc

    scatter(0.5,0.5,70,'r','filled'); 
    

    [đoạn mã được dựa trên this answer]. Như đã đề cập trong liên kết, nhược điểm ở đây là kích thước điểm đánh dấu không thay đổi với thu phóng.

  • Như một phương án cuối cùng, bạn có thể lưu hình ảnh ở một số định dạng vectơ (chẳng hạn như .emf), chỉnh sửa nó (với cái gì đó như InkScape), mang các vòng tròn nền đến một lớp cao hơn và xuất nó.
+0

Thật vậy, mã của bạn tạo vòng kết nối với nền màu trắng ngay cả sau khi lưu vào jpg. Nhưng tôi vẽ nhiều ô trong một hình và tôi cần các vòng tròn chính xác ở vị trí nhất định. Tôi không biết làm thế nào để có được vị trí chính xác của cốt truyện cụ thể. Tôi không biết khoảng cách giữa các ô là bao nhiêu. Hơn nữa tôi đang sử dụng chức năng bảng điều khiển để giảm những khoảng trống đó. – user50222

+1

Tọa độ trục bản đồ từ và đến tọa độ có thể được thực hiện như được giải thích trong [câu trả lời chính của MATLAB] (http://www.mathworks.com/matlabcentral/newsreader/view_thread/61816). –

0

thử:

print('-painters','-dpng','myFile') 

hoặc

print('-painters','-dsvg','myFile') 

Logic: từ documentation vẻ như mô hình vẽ được thay đổi từ họa sĩ (những gì bạn dự định) để OpenGL khi lưu tập tin. Tôi nghi ngờ rằng OpenGL không tôn trọng ý định của bạn và buộc trình kết xuất tới họa sĩ sẽ giải quyết được sự cố. Nhưng không rõ liệu có thể sử dụng hiển thị họa sĩ cho hình ảnh bitmap và không chỉ hình ảnh vector, vì vậy ví dụ đầu tiên có thể không thành công.

+0

Cảm ơn phản ứng của bạn, nhưng cách tiếp cận này không có sự khác biệt. Vẫn không hoạt động. – user50222

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