2016-12-08 121 views
1

我有以下功能ggplot2情節。該函數的一個功能是調用str_wrap函數來處理我擁有的非常長的標籤。R - 劇情處理長標籤

PlotResponseRate <- function(EntryData) 
{ 
    PlotData <- as.data.frame(apply(X = EntryData, MARGIN = 2, 
              function(x) round(length(which(!is.na(x)))/length(x)*100))) 
    colnames(PlotData) <- "TheData"  
    PlotData$TheLabel <- factor(str_wrap(colnames(EntryData), width = 30), 
            levels = unique(str_wrap(colnames(EntryData), width = 30))) 

    Graphe <- ggplot(data = PlotData, aes(x = TheLabel, y = TheData)) + 
    geom_bar(stat = "identity", fill = "red", width = 0.8) + 
    coord_flip() + 
    labs(title = "Response rate") 
    } 

它工作正常,在「普通」 R環境在,我想與plotly使用它。因此,我添加以下代碼行:

PlotData$TheLabel <- gsub(pattern = "\n", replacement = "\n<br>", PlotData$TheLabel) 

這似乎工作,但還有一個問題:在圖中左側的空間太寬(我不知道,但它看起來是與長標籤相同的空間)。

如何解決此問題?

下面是一個簡單的例子:

library(stringr) 
library(ggplot2) 
library(plotly) 

a <- c(1, 2, 2, 2, NA, 1, 2, 2, 1) 
b <- c(2, 1, 2, NA, 2, NA, 1, NA, 1) 
df <- data.frame(a, b) 

colnames(df) <- c("This Is A Long Answer To A Long Question Label For The First Question", 
        "This Is A Long Answer To A Long Question Label For The Second Question") 

TheGgplot2Plot <- PlotResponseRate(df) 

ThePlotlyPlot <- ggplotly(TheGgplot2Plot) 
print(ThePlotlyPlot) 

enter image description here

回答

2

您可以使用plotly_build()調整頁邊距。

這個通用函數創建發送到plotly.js爲 渲染列表對象。使用此功能可用於覆蓋ggplotly/plot_ly提供的默認值 或調試渲染錯誤。

使用plotly_build生成列表對象:

ThePlotlyPlot <- plotly_build(TheGgplot2Plot) 

景觀結構:

str(ThePlotlyPlot) 

..$ layout :List of 13 
    .. ..$ margin  :List of 4 
    .. .. ..$ t: num 57.7 
    .. .. ..$ r: num 7.31 
    .. .. ..$ b: num 54.1 
    .. .. ..$ l: num 481 

調整邊距:

ThePlotlyPlot$x$layout$margin$l <- 100 

enter image description here

+0

謝謝,它的工作原理中的R,但是我有光澤'輸出$ TheResponseRate <錯誤 - renderPlotly({ MyPlot < - PlotResponseRate(EntryData = DF) MyPlot < - plotly_build(MyPlot) MyPlot $ X $佈局$餘量$ l < - 180 })' – Kumpelka

+0

消息是「Error in UseMethod:no ggplotly'方法適用於類」c('double','numeric')「的對象。 – Kumpelka