2013-07-22 90 views
1

我正在創作有很多(小〜100)列(小提琴)的小提琴情節。問題是每列的名字很長。我在做什麼目前的情況如下:R - 小提琴情節x軸名稱

jpeg("stats/AllDistanceViolinPlot.jpg", width = 1000, height = 1000); 
do.call(vioplot, c(lapply(data, na.omit),list(names=c("veryveryveryverylongname1", "veryveryveryverylongname2", "veryveryveryverylongname4", "veryveryveryverylongname4", "veryveryveryverylongname5", "veryveryveryverylongname6", "veryveryveryverylongname7", "veryveryveryverylongname8")))); 
dev.off() 

,給了我這樣的情節:

enter image description here

正如你所看到的,列的名稱很長,有的居然不顯示。我也曾嘗試的東西,而不名單:

jpeg("stats/plot.jpg", width = 1000, height = 1000); 
do.call(vioplot, c(lapply(data, na.omit))); 
dev.off() 

,給了我這樣的情節:

enter image description here

我想什麼是兩件事情之一:

  1. 名稱的列將是垂直的,以便它們被顯示並且不被切斷 或
  2. 使主要情節像我發佈的第二張圖像一樣,並且有一個單獨的圖例可以將每列與全名相關聯。例如,像下面這樣:

    1 - veryveryveryverylongname1 2 - veryveryveryverylongname2 ... 8 - veryveryveryverylongname8

可能有人請提出更好的辦法(或兩者),以及如何進行評論執行它們?

非常感謝。

+0

護理提供可重複的例子嗎? –

+0

我想我可以做一個搜索並找出有'vioplot'的包,但這不是你的責任嗎? –

+0

我檢查了vioplot軟件包,但沒有看到任何類型的東西。那爲什麼我張貼,知道是否有其他人知道這件事。 – intl

回答

3

不幸的是,vioplot軟件包中的vioplot函數不接受通常的基礎圖形參數來修改軸註釋的方向。您將需要一個新的vioplot功能和更改此代碼:

if (!horizontal) { 
    if (!add) { 
     plot.window(xlim = xlim, ylim = ylim) 
     axis(2) 
     axis(1, at = at, label = label) 

要這樣:

if (!horizontal) { 
    if (!add) { 
     plot.window(xlim = xlim, ylim = ylim) 
     axis(2) 
     axis(1, at = at, label = label , las=2) 
+0

你的意思是編輯軟件包文件本身,對嗎? – intl

+1

@intl:不需要,只需複製函數的代碼並給它另一個名字。 – EDi