2016-08-19 19 views
1

プロットをggplotからplotlyに印刷して、文字の位置を維持するのに問題があります。ggplotとpllyでテキストの位置を調整する

データの例は:あなたが見ることができるように

library(ggplot2) 
library(plotly) 
library(dplyr) 
library(reshape2) 

#mock data 
df1 <- data.frame( 
    Gruppering2  = factor(c("Erhverv Erhverv Salg","Erhverv Erhverv Salg","Erhverv Erhverv Salg")), 
    periode = factor(c("Denne maaned","Denne uge", "I gaard")), 
    Answer_rate = c(0.01,0.4,0.7), 
    SVL = c(0.40,0.43,0.67), 
    over_180  = c(0.5,0.7,0.3) 
) 

#color 
plotCol <- c(rgb(44,121,91, maxColorValue = 255), rgb(139,0,0, maxColorValue = 255),rgb(0,0,139, maxColorValue = 255)) 

#plot code 
dfpct <- melt(df1[,c(2,3,4,5)], id.vars = "periode", 
       measure.vars = c("Answer_rate","SVL", "over_180"), 
       variable.name = "P", value.name = "value") 
dfpct <- na.omit(dfpct) 

pct <- ggplot(dfpct, aes(x = periode, y = value, fill = P, group = P, width = 0.6)) + 
    geom_bar(stat = "identity", position="dodge", colour = "black", width = 0.7, show.legend = FALSE) + 
    labs(x = NULL, y = "Calls") + 
    #ggtitle("Forecast Error") + 
    theme_bw() + 
    theme(panel.grid.major = element_blank(), 
     plot.title = element_text(size = rel(1.2), face = "bold", vjust = 1.5), 
     axis.title = element_text(face = "bold"), 
     axis.text = element_text(), 
     legend.position = "bottom", 
     legend.direction = "vertical", 
     legend.key.width = unit(2, "lines"), 
     legend.key.height = unit(0.5, "lines"), 
     legend.title = element_blank()) + 
    geom_text(aes(label=paste(value*100,"%",sep="")), position = position_dodge(width=0.6), vjust = -0.5) + 
    scale_fill_manual(values = plotCol) 

pct # the is perfectly located above 

ggplotly(pct, textposition = 'top center') # text crosses over the bars 

からggplot作品優れた - 私はplotlyに変換するときただし、テキストが移動されます。私はggplotとpllyの両方でさまざまな設定で遊んでみましたが、まだ運はありません。

答えて

4

のように見えるvjustは認識されませんが、おそらくロードマップにあります。 GitHubのから:

# convert ggplot2::element_text() to plotly annotation 
make_label <- function(txt = "", x, y, el = ggplot2::element_text(), ...) { 
    if (is_blank(el) || is.null(txt) || nchar(txt) == 0 || length(txt) == 0) { 
    return(NULL) 
    } 
    angle <- el$angle %||% 0 
    list(list(
    text = txt, 
    x = x, 
    y = y, 
    showarrow = FALSE, 
    # TODO: hjust/vjust? 
    ax = 0, 
    ay = 0, 
    font = text2font(el), 
    xref = "paper", 
    yref = "paper", 
    textangle = -angle, 
    ... 
)) 
} 

最も簡単な方法は、geom_textY値を割り当てることがあるかもしれないが、あなたは高さで、いくつかのスケーリングを失うことになります。

gg <- plotly_build(pct) 
gg$data[[4]]$y <- gg$data[[4]]$y+0.006 
gg$data[[5]]$y <- gg$data[[5]]$y+0.006 
gg$data[[6]]$y <- gg$data[[6]]$y+0.006 
:あなたが最終的な出力の大きさを知っていれば

pct <- ggplot(dfpct, aes(x = periode, y = value, fill = P, group = P, width = 0.6)) + 
    geom_bar(stat = "identity", position="dodge", colour = "black", width = 0.7, show.legend = FALSE) + 
    labs(x = NULL, y = "Calls") + 
    theme_bw() + 
    theme(panel.grid.major = element_blank(), 
     plot.title = element_text(size = rel(1.2), face = "bold", vjust = 1.5), 
     axis.title = element_text(face = "bold"), 
     axis.text = element_text(), 
     legend.position = "bottom", 
     legend.direction = "vertical", 
     legend.key.width = unit(2, "lines"), 
     legend.key.height = unit(0.5, "lines"), 
     legend.title = element_blank()) + 
    geom_text(aes(label=paste(value*100,"%",sep=""), y = value+0.01), position = position_dodge(width = 0.6)) + 
    scale_fill_manual(values = plotCol) 

ggplotly(pct) 

enter image description here

あるいは、あなたはplotly_buildオブジェクトの要素を編集できます

関連する問題