2012-01-19 19 views
7

Tôi đang sử dụng GraphPlot để vẽ các biểu đồ có hướng bằng khoảng 100 đỉnh. Tôi đang thay thế từng đỉnh bằng một hình chữ nhật hoặc hình vuông nhỏ bằng cách xác định VertexRenderingFunction. Các hình ảnh thường chồng lên nhau. Có cách nào để có được Mathematica để không gian các đỉnh xa nhau hơn để ngăn chặn chúng từ chồng chéo?Trong Mathematica. Khi sử dụng hình ảnh làm đỉnh trong GraphPlot, làm cách nào để ngăn hình ảnh bị trùng lặp?

Tôi đã thử các tùy chọn hiển thị khác nhau cho 'Phương pháp' ("SpringElectricalEmbedding", "SpringEmbedding", "HighDimensionalEmbedding", "CircularEmbedding", "RandomEmbedding", "LinearEmbedding").

trans = {1 -> 1, 2 -> 1, 3 -> 1, 4 -> 1, 5 -> 1, 6 -> 1, 7 -> 1, 
8 -> 1, 9 -> 1, 10 -> 1, 11 -> 1, 12 -> 1, 13 -> 1, 14 -> 1, 
15 -> 1, 16 -> 1, 17 -> 1, 18 -> 13, 19 -> 1, 20 -> 13, 21 -> 13, 
22 -> 70, 23 -> 1, 24 -> 1, 25 -> 1, 26 -> 1, 27 -> 13, 28 -> 13, 
29 -> 1, 30 -> 13, 31 -> 13, 32 -> 1, 33 -> 19, 34 -> 70, 35 -> 70, 
36 -> 1, 37 -> 1, 38 -> 1, 39 -> 39, 40 -> 13, 41 -> 2, 42 -> 13, 
43 -> 1, 44 -> 2, 45 -> 1, 46 -> 52, 47 -> 2, 48 -> 68, 49 -> 49, 
50 -> 19, 51 -> 78, 52 -> 1, 53 -> 1, 54 -> 39, 55 -> 13, 56 -> 56, 
57 -> 13, 58 -> 13, 59 -> 1, 60 -> 36, 61 -> 1, 62 -> 52, 63 -> 2, 
6 4 -> 68, 65 -> 19, 66 -> 56, 67 -> 4, 68 -> 76, 69 -> 19, 
70 -> 78, 71 -> 1, 72 -> 39, 73 -> 52, 74 -> 56, 75 -> 23, 
76 -> 76, 77 -> 56, 78 -> 78}; 

image = {{1, 0, 0, 0, 0}, {0, 1, 0, 0, 0}}; 

GraphPlot[trans, DirectedEdges -> True, VertexLabeling -> True, 
VertexRenderingFunction -> (Inset[ 
ArrayPlot[image, ImageSize -> 15, Mesh -> True], #1] &)] 

Output

+2

Chào mừng bạn đến với Stackoverflow. Tại sao bạn không bao gồm mã mà bạn đã sử dụng (hoặc một số mẫu của nó) để chúng tôi có thể kiểm tra vấn đề bạn đang gặp phải. – DavidC

+0

Cảm ơn phản hồi, tôi đang xem xét một số đề xuất bạn đã thực hiện. Tôi đã thêm một ví dụ có thể giúp làm rõ câu hỏi của tôi. – Martijn

+0

Bạn có định hình ảnh giống nhau cho mỗi đỉnh không? Hoặc một số đỉnh sẽ khác nhau? (Tôi có lý do để hỏi). – DavidC

Trả lời

3

Sửa [Tôi bắt đầu kết thúc, dựa trên ví dụ bạn đưa ra]:

Sử dụng trans của bạn và image bạn có thể thử:

p = ArrayPlot[image, ImageSize -> 35, Mesh -> True]; 

Graph[trans, DirectedEdges -> True, VertexLabels -> Placed[p, Tooltip], 
    ImagePadding -> 10, ImageSize -> 500] 

Các hình ảnh sẽ xuất hiện trong chú giải công cụ khi bạn di chuột qua từng đỉnh. Bạn có thể sử dụng các hình ảnh khác nhau cho các nhãn đỉnh khác nhau nếu bạn muốn; chỉ cần sử dụng danh sách các quy tắc.

Hình ảnh bên dưới cho thấy hình ảnh trông như thế nào (không có chú giải công cụ). Nhấp vào link để xem cách hoạt động với chú giải công cụ.

graph

+0

Thats một cách khá gọn gàng để làm điều đó! Đã không sử dụng chú giải công cụ trước đây. Nhưng tôi đang in ra những hình ảnh để đưa vào luận án của tôi, muốn có thể xem tất cả các hình ảnh cùng một lúc. – Martijn

+0

Có, chú giải công cụ sẽ không xuất hiện trên giấy. Vì vậy, có vẻ như biểu đồ của bạn có thể cần phải được vẽ lớn hơn một chút so với ban đầu bạn đã hình dung. Không có lý do, một ưu tiên, tại sao bạn không thể sử dụng một trang đầy đủ để hiển thị một con số với chú thích, phải không? Ở quy mô đó, giải pháp hiện tại của bạn, thông qua 'GraphPlot' sẽ hoạt động. Nếu tôi cần kiểm soát nhiều hơn đối với hiển thị, tôi sẽ sử dụng OmniGraffle Pro (dành cho máy Mac) hoặc Visio. Đối với một giải pháp một lần, điều này sẽ làm việc. Nếu bạn có nhiều số liệu với 100 đỉnh, số lượng công việc sẽ bị cấm. – DavidC

+0

Tôi có một số loại biểu đồ này. Một phần lớn tôi đã chỉnh sửa bằng cách sử dụng ipe, nhưng nó là khá tốn thời gian. Tôi đã hy vọng có một giải pháp chung chung. Một vấn đề nhỏ khi thu nhỏ số liệu là khi thay đổi kích thước các hình bằng cách kéo một góc của hình ảnh, kích thước của các mũi tên trên thang tỷ lệ hướng tới và một hoặc hai hình ảnh vẫn có thể chồng chéo đòi hỏi một số chỉnh sửa thủ công (đã tốt hơn) , nhưng sẽ rất tuyệt khi có một giải pháp hoàn hảo, nơi mọi thứ diễn ra tự động nhiều hoặc ít hơn. Cảm ơn tất cả các đầu vào của bạn cho đến nay! Tôi đã học được một vài thủ đoạn mới. – Martijn

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