2013-08-15 78 views
7

tôi xây dựng dendrogram trong R với mã:R & Inkscape: nhãn văn bản trong đồ họa SVG xuất khẩu từ R đã không được coi là một văn bản trong Inkscape

data(iris) 

aver<-sapply(iris[,-5],function(x) by(x,iris$Species,mean)) 
matrix<-dist(aver) 

clust<-hclust((matrix),"ave") 
clust$labels<-row.names(aver) 
plot(as.dendrogram(clust)) 

tôi muốn lưu dendrogram dưới dạng file svg bằng cách sử dụng mã:

install.packages("Cairo") 
library(Cairo) 

svg("plot.svg") 
plot(as.dendrogram(clust)) 
dev.off() 

Ở đây, vấn đề bắt đầu:

Khi tôi nhập khẩu các "plot.svg" vào Inkscape (ver: 0.48.4) và chọn bất kỳ nhãn (ví dụ: "setosa") nó không được công nhận dưới dạng văn bản, nhưng đúng hơn là s một số "người dùng xác định" đối tượng. Cụ thể, khi tôi chọn bất kỳ "chữ" trong nhãn và kiểm tra nó với các biên tập XML (ctrl + shift + X) trong Inkscape tôi nhận được thông tin này:

**id**: use117 

    **x**: 142.527344 

    **xlink:href**: #glyph0-8 

    **y**: 442.589844 

Mặt khác, khi tôi tự viết " setosa" sử dụng 'tạo ra và các đối tượng chỉnh sửa văn bản' công cụ, và kiểm tra trong XML Editor, nó trả về:

**id**: text4274 

    **sodipodi:linespacing**: 125% 

    **style**: font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino Linotype;-inkscape-font-specification:Palatino Linotype 

    **transform**: scale(0.8,0.8) 

    **x**: 176.02016 

    **xml:space**: preserve 

    **y**: 596.96674 

Dường như Inkscape đã không nhận ra nhãn như một văn bản theo quy định của thuộc tính 'id' từ XML Biên tập viên. Do đó, tôi không thể thay đổi phông chữ, kích thước cũng như sử dụng các chức năng khác liên quan đến đối tượng văn bản trong Inkscape.

Đây là svg file, mà tôi thực hiện với mã trước và nhập khẩu vào Inkscape

Tôi đã kiểm tra các bước trước đó sử dụng các phiên bản khác của Inkscape cũng như R, nhưng nó sẽ là như vậy.

Đây là câu hỏi:

Bạn có bất cứ đề nghị làm thế nào tôi có thể thu thập nhãn như thuộc tính một văn bản thay vì một "người sử dụng định nghĩa" (hoặc bất cứ điều gì nó là đối tượng ...) khi nhập file svg từ R vào Inkscape?

CẬP NHẬT

@baptiste liên kết với SO thread nơi @ Oscar Perpiñán đề nghị ba gói (gridSVG, SVGAnnotation và RSVGTipsDevice) mà thao tác SVG. Thật không may, không phải các gói được đề xuất có thể giải quyết vấn đề với vấn đề văn bản. Cho đến nay tôi đã tìm thấy SO thread trong đó @Mo Sander gói RSvgDevice được đề xuất vì nó có thể bảo toàn đối tượng văn bản thay vì glyph. Đang bị mắc kẹt với thủ tục cài đặt RSvgDevice, tôi thấy rằng nó RSvgDevice chỉ có sẵn cho các cài đặt 32-bit và R < 2.15.0. Nếu không, thông báo cảnh báo R trả lại:

Warning message: 
package ‘RSvgDevice’ is not available (for R version 3.0.1) 

Bên cạnh yêu cầu đối với phiên bản cũ hơn, hiện tại chỉ RSvgDevice có thể bảo toàn đối tượng văn bản trong SVG.

+0

bạn đã thử tất cả các thiết bị svg khác nhau có sẵn trong R? IIRC một trong số họ xử lý văn bản khác với các văn bản khác, ít nhất là không có âm mưu. – baptiste

+0

Không, bạn có thể đề xuất một số thiết bị khác không? Tôi xin lỗi, nhưng tôi không biết IIRC là gì? –

+1

http://stackoverflow.com/a/7562016/471093 – baptiste

Trả lời

0

R rõ ràng là không sử dụng các đối tượng văn bản SVG chuẩn để tạo nhãn của nó. Tôi không biết tại sao. Tôi không phải là người dùng R.

Có thể theo mặc định, nó sử dụng phông chữ tùy chỉnh riêng của nó để nó chèn thủ công glyph-by-glyph vào đầu ra. Bạn đang sử dụng cùng một phông chữ trong cả hai trường hợp? Trong Inkscape bạn đang sử dụng Palatino. Đó có phải là những gì bạn đang sử dụng cho các nhãn trong R?

+0

Tnx cho trả lời @BigBadaboom. Không quá quan trọng để sử dụng cùng một phông chữ * mỗi lần *, mà là để đảm bảo rằng Inkscape có họ phông chữ và loại được cài đặt phù hợp với đầu ra R. Xem xét vấn đề này, theo [support.rstudio.org] (http://support.rstudio.org/help/discussions/questions/446-whats-the-name-of-the-default-font-type-in- r-studio) diễn đàn chủ đề, Rstudio (mà tôi đang sử dụng) có phông chữ mặc định ** Lucida Console **. Inkscape cũng có phông chữ đó. Palatino chỉ là một ví dụ để hiển thị cách Inkscape xử lý đối tượng văn bản so với đối tượng "người dùng xác định" từ biểu đồ R. –

+0

Dưới đây là một số ví dụ mà mọi người xử lý văn bản từ đồ họa R trong Inkscape dưới dạng đối tượng văn bản: [1] (http://rforwork.info/2012/04/12/fun-editing-r-graphs-in-inkscape/) [2] (http://www.carlislerainey.com/2011/09/26/using-inkscape-to-post-edit-labels-in-r-graphs/) Nhưng, khi tôi cố gắng làm như vậy với dữ liệu của tôi, hoặc với ví dụ được đăng ở trên, tôi không thể xử lý các đối tượng R "văn bản" trong Inkscape. –

+0

Tôi bị mắc kẹt khi đoán xem điều gì có thể xảy ra. Bạn có thể cập nhật câu hỏi của mình với tệp SVG mẫu đang gây ra sự cố không? –

2

Đây là lỗi ở Cairo. Thiếu tá, theo quan điểm của tôi.

Bề mặt SVG của trình quản lý (ví dụ: mặt sau ở Cairo được sử dụng để "vẽ" trên SVG) không hỗ trợ thẻ "văn bản". Nó không hiểu về dây. Thay vào đó, nó đặt từng ký tự (glyph) riêng lẻ. Vì vậy, bất kỳ SVG nào được tạo bằng Cairo không hữu ích nếu bạn muốn xử lý văn bản có chứa một trình soạn thảo vector. :(

Việc đề cập đến duy nhất mà tôi tìm thấy trên danh sách cairo là này một:.

http://lists.cairographics.org/archives/cairo/2011-February/021777.html

2

tôi là một chút muộn để đảng, nhưng tôi đã được giao dịch với điều này bản thân mình tôi thấy Trước tiên, tôi xuất bản đồ dưới dạng PDF thay vì SVG vì phông chữ PDF được nhận dạng bởi inkscape.

Điều này mang lại một vấn đề mới vì văn bản thường được xác định bằng chữ cái có nghĩa là bạn có thể thay đổi phông chữ, nhưng khoảng cách vẫn được xác định và nó trở nên vô cùng khó chịu. Tôi thấy rằng đó là do t o tọa độ x được xác định tại mỗi chữ cái.

Tôi đã viết một tập lệnh perl và đặt nó in this gist để xóa tất cả các tọa độ theo sau. Sau đó tôi có thể thao tác tất cả các phông chữ mà tôi mong muốn. Lưu ý rằng điều này sẽ chỉ hoạt động cho văn bản nằm ngang.

Hy vọng rằng sẽ giúp vấn đề này bạn đã có hơn một năm trước :)

+0

Đã quay lại và thử nghiệm nó với văn bản dọc và góc cạnh. Dường như nó cũng hoạt động với những thứ này. – ZNK