2013-08-15 14 views
7

budowałem dendrogram w R z kodem:R & Inkscape: etykiety tekstowe w ilustracjach SVG eksportowanych z R nie rozpoznawane jako tekst w 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)) 

chciałem zaoszczędzić dendrogramie jako plik svg przy użyciu Kod:

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

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

Tutaj problem zaczął:

Kiedy sprowadziliśmy "plot.svg" Into Inkscape (ver: 0.48.4) i wybiera dowolną etykietę (np "setosa") nie został rozpoznany jako tekst, ale raczej jako s jakiś obiekt "zdefiniowany przez użytkownika". W szczególności, kiedy wybrano żadnych „nas” w etykiecie i sprawdzić go z edytora XML (Ctrl + Shift + X) w Inkscape Zdobyłem tę informację:

**id**: use117 

    **x**: 142.527344 

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

    **y**: 442.589844 

Z drugiej strony, kiedy ręcznie napisał " setosa”za pomocą«tworzyć i edytować obiekty tekstowe»narzędziem, a kontrolowane w edytorze XML, powrócił:

**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 

jest prawdopodobne, że Inkscape nie uznają etykiety jako tekst zgodnie z atrybutem«id»z XML Redaktor. Dlatego nie mogę zmienić ani czcionki, rozmiaru, ani korzystać z innych funkcji związanych z obiektami tekstowymi w Inkscape.

Oto svg file, że zrobiłem z poprzedniego kodu i importowane do programu Inkscape

sprawdziłem powyższe czynności, używając innych wersji Inkscape oraz R, ale byłoby to samo.

Oto pytanie:

Czy macie jakieś sugestie jak mogę zebrać jak etykiety atrybutu tekstu zamiast „Użytkownika” (lub cokolwiek to jest przedmiot ...) podczas importowania plików SVG z R do Inkscape?

UPDATE

@baptiste związane z SO thread gdzie @Oscar Perpiñán proponuje trzy pakiety (gridSVG, SVGAnnotation i RSVGTipsDevice), które manipulują SVG. Niestety żaden z proponowanych pakietów nie rozwiązał problemu z tekstem. Do tej pory znalazłem SO thread gdzie @Mo Sander zaproponował pakiet RSvgDevice, ponieważ może on zachować obiekt tekstowy zamiast glifów. Utknąłem z procedurą instalacji RSvgDevice, stwierdziłem, że RSvgDevice jest dostępne tylko dla instalacji 32-bitowych i R < 2.15.0. W przeciwnym razie, R zwrócony komunikat ostrzegawczy:

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

obok wymagań dla starszych wersji R, obecnie tylko RSvgDevice może zachować obiekt tekstowy w SVG.

+0

Czy wypróbowałeś wszystkie urządzenia svg dostępne w R? IIRC jeden z nich traktował tekst inaczej niż pozostałe, przynajmniej bez spisku. – baptiste

+0

Nie, czy możesz zaproponować inne urządzenia? Przykro mi, ale nie wiem, co to jest IIRC? –

+1

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

Odpowiedz

0

R wyraźnie nie używa standardowych obiektów tekstowych SVG do tworzenia swoich etykiet. Nie mam pojęcia dlaczego. Nie jestem użytkownikiem R.

Prawdopodobnie domyślnie używa własnej niestandardowej czcionki, która ręcznie wstawia glif do glifu na wyjściu. Czy używasz tej samej czcionki w obu przypadkach? W Inkscape używasz Palatino. Czy to jest to, czego używasz dla etykiet w R?

+0

Tnx dla odpowiedzi @BigBadaboom. Nie jest ważne, aby użyć tej samej czcionki * per se *, ale raczej upewnić się, że Inkscape ma zainstalowaną rodzinę czcionek i typ pasujący do wyjścia R. Biorąc pod uwagę tę kwestię, zgodnie z [support.rstudio.org] (http://support.rstudio.org/help/discussions/questions/446-whats-the-name-of-the-default-font-type-in- r-studio) wątek na forum, Rstudio (którego używam) ma domyślną czcionkę ** Lucida Console **. Inkscape ma również tę czcionkę. Palatino był tylko przykładem, aby pokazać, jak Inkscape traktuje obiekty tekstowe w porównaniu z obiektami "zdefiniowanymi przez użytkownika" z wykresów R. –

+0

Oto kilka przykładów, że ludzie przetwarzali tekst z grafiki R w Inkscape jako obiekty tekstowe: [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/) Ale kiedy próbowałem to zrobić z moimi danymi, lub z przytoczonym powyżej przykładem, nie byłem w stanie obsłużyć R "tekstowych" obiektów w Inkscape. –

+0

Utknąłem, zgadując, co może się dziać. Czy jesteś w stanie zaktualizować swoje pytanie przykładowym plikiem SVG, który powoduje problemy? –

2

To błąd w Kairze. Majorze, z mojego punktu widzenia.

Powierzchnia cairo SVG (tj. Back-end w Kairze używana do "rysowania" na SVG) po prostu nie obsługuje znacznika "tekst". W ogóle nie rozumie ciągów znaków. Zamiast tego umieszcza każdy znak (glif) indywidualnie. Tak więc każdy SVG wygenerowany w Kairze nie jest przydatny, jeśli chcesz przetworzyć tekst zawarty w edytorze wektorowym. :(

Jedyna wzmianka znalazłem na liście Kairze ten jeden.

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

2

Jestem trochę późno do partii, ale mam do czynienia z tym ja znalazłem sztuczka, aby to zadziałało Najpierw wyeksportuję działkę jako PDF zamiast SVG, ponieważ czcionki PDF są rozpoznawane przez inkscape

To jednak przynosi nowy problem, ponieważ tekst często kończy się określeniem litery po literze, co oznacza, że możesz zmienić czcionkę, ale odstępy są nadal zdefiniowane i stają się niezwykle irytujące. o współrzędna x określona dla każdej litery.

Napisałem skrypt perla i ustawiłem go na in this gist, aby usunąć wszystkie końcowe współrzędne. Potem jestem w stanie manipulować wszystkimi czcionkami, które chciałem. Zwróć uwagę, że działa to tylko w przypadku tekstu poziomego.

Mamy nadzieję, że pomogłeś w rozwiązaniu tego problemu ponad rok temu :)

+0

Wrócił i przetestował go pod kątem tekstu pionowego i kątowego. Wydaje się, że działa również z tymi. – ZNK

Powiązane problemy