2016-08-18 29 views
3

編輯:用更復雜的例子更新示例代碼ggvis - 定製非數字y軸的標籤顯示爲「男」

我與(X,Y)值的數據幀和每一個的名稱對,我正在繪製一張ggvis散點圖。因此,用戶已經向我指出這個帖子(How do I label plot tick marks using ggvis),我更新了我的代碼,以反映我看到有使用factor()創建它的add_axis()聲明下喂values =定製y軸標籤ylabels_名單。下面是新的代碼:

library(stringi) 
require(ggvis) 

set.seed(13) 
df <- data.frame(x = 1:15, 
       y = c(rep.int(1, 15), 
         rep.int(4, 15), 
         rep.int(7, 15))) 

ylabels_ <- factor(c(1,4,7), labels = stri_rand_strings(3, 7)) 

df %>% 
    ggvis(~x, ~y) %>% 
    add_axis("y", values = ylabels_) 

我的軸標籤仍與NaN代替因素回來。我錯過了什麼嗎?

解決方案編輯:這是我終於開始工作的代碼。注意我改變了x值以使它們錯開,這樣我就可以區分這三條線。

library(stringi) 
require(ggvis) 

set.seed(13) 
df <- data.frame(x = c(seq(1, length.out = 15, by = 3), 
         seq(2, length.out = 15, by = 3), 
         seq(3, length.out = 15, by = 3)), 
       y = factor(c(rep.int(1, 15), 
         rep.int(4, 15), 
         rep.int(7, 15)), labels = c("one", "four", "seven"), 
         ordered = T)) 

df %>% 
    ggvis(~x, ~y) %>% 
    layer_points() %>% 
    scale_ordinal("y", domain = c("seven", "four", "one") 

我不明白爲什麼在domain =部分我不得不逆轉的因素以便讓他們以正確的順序顯示。如果有人有任何的洞察力,這將是非常有益的!

回答

1

注意,在鏈接的答案,新的因子變量作爲變量爲y。你可以用它爲你的values,爲好,但它不是必需的。

根據y製作新因子,但使用name作爲標籤是以正確的打印順序獲取name變量。

df$ylabels_ <- factor(df$y, labels = stri_rand_strings(3, 7)) 

因爲你現在與y軸在因子變量工作,layer_points需要明確地使用。

df %>% 
    ggvis(~x, ~ylabels_) %>% 
    layer_points() 

注意,如果原始數據y是整數這整個的做法只會工作。

+0

我認爲我給出的例子太簡單了 - 我要發佈一個修訂示例 –

+0

@JonathanH如果問題重複y值,把新的變量在數據集中,而不是做一個獨立的載體。但根據我關於連續變量的說明,該因子將導致等間距而不是「連續」間距。 – aosmith

+1

我最終作出更多的修改代碼,但你的答案幫助讓我的地方,我需要的是! –

0

叫我傻瓜,但我這個調用的錯誤(其中,順便說一句,不回答你的問題):

## set up data 
lab <- factor(1:15, labels=stri_rand_strings(15, 7)) 
val <- 1:15 

## all works according to expectations on the "x" axis 
data.frame(xx=lab, yy=val) %>% 
    ggvis(~xx, ~yy) %>% 
    layer_points() %>% 
    add_axis("x", values=lab, 
      properties=axis_props(labels=list(angle=90, fontSize = 10))) 

## nothing works according to expectations on the "y" axis 
## attempt 1 
data.frame(xx=val, yy=lab) %>% 
    ggvis(~xx, ~yy) %>% 
    layer_points() %>% 
    add_axis("y", values=lab, 
      properties=axis_props(labels=list(angle= 0, fontSize = 10))) 

## attempt 2 
data.frame(xx=val, yy=as.numeric(val)) %>% 
    ggvis(~xx, ~yy) %>% 
    layer_points() %>% 
    add_axis("y", values=lab, 
      properties=axis_props(labels=list(angle= 0, fontSize = 10))) 
+0

不是很確定你說的是什麼問題,但是我發現對我有用的解決方案高於 –