2016-05-17 113 views
4

我在ggplotly中使用了一個geom_bar繪圖圖形,並將負向條形圖呈現爲正數。任何想法爲什麼這可能是這種情況,特別是如何解決這個問題?ggplotly在正方向上繪製負向條形圖

library(ggplot2) 
library(plotly) 
dat1 <- data.frame(
    sex = factor(c("Female","Female","Male","Male")), 
    time = factor(c("Lunch","Dinner","Lunch","Dinner"), levels=c("Lunch","Dinner")), 
    total_bill = c(-13.53, 16.81, 16.24, 17.42) 
) 

# Bar graph, time on x-axis, color fill grouped by sex -- use position_dodge() 
g <- ggplot(data=dat1, aes(x=time, y=total_bill, fill=sex)) + 
    geom_bar(stat="identity", position=position_dodge()) 
ggplotly(g) 

爲什麼第一個柱子會處於正向,負值?

,我使用的版本是最新的:

plotly_3.4.13

ggplot2_2.1.0

+4

看起來像這是一個'ggplotly'的已知問題(https://github.com/ropensci/plotly/issues/560) – joemienko

+0

啊我看到了...那是不幸的。有關避免這個問題的任何建議,而不是打開陰謀(例如通過更改某些規範)?或者最好等待修復? – Nick

+0

我認爲這取決於您的具體使用情況 - 您確定需要積極使用嗎? – joemienko

回答

3

如果你寫你的plotly對象另一個變量可以修改plotly屬性,包括'數據「來渲染劇情。

爲了您的具體的例子把這段代碼:

#create plotly object to manipulate 
gly<-ggplotly(g) 

#confirm existing data structure/values 
gly$x$data[[1]] 
# see $y has values of 13.53, 16.81 which corresponds to first groups absolute values 

#assign to original data 
gly$x$data[[1]]$y <- dat1$total_bill[grep("Female",dat1$sex)] 

#could do for second group too if needed 
gly$x$data[[2]]$y <- dat1$total_bill[grep("Male",dat1$sex)] 

#to see ggplotly object with changes 
gly 

enter image description here

0

我想出了其中使用小包裝在案件工作有一個大致的解決方案。這是問題的玩具數據爲例:

set.seed(45) 

df <- data.frame(group=rep(1:4,5), TitleX=rep(1:5,4), TitleY=sample(-5:5,20, replace = TRUE)) 

h <- ggplot(df) + geom_bar(aes(TitleX,TitleY),stat = 'identity') + facet_wrap(~group) 

h 

Fake Data with Negatives

當我們使用ggplotly我們看到的OP鋸,這是底片已經消失:

gly <- ggplotly(h) 
gly 

Where did the negatives go?

我寫了一個函數,它將檢查每個方面列表中的實例,其中文本中的y值被賦值爲0,這似乎是

fix_bar_ly <- function(element,yname){ 
    tmp <- as.data.frame(element[c("y","text")]) 
    tmp <- tmp %>% mutate(
    y=ifelse(grepl(paste0(yname,": 0$"),text), 
      ifelse(y!=0,-y,y), 
      y) 
) 
    element$y <- tmp$y 
    element 
} 

現在我把這個函數的數據每個面:有一個我目前正在處理共病問題

data.list <- gly$x$data 
m <- lapply(data.list,function(x){fix_bar_ly(x,"TitleY")}) 
gly$x$data <- m 
gly 

enter image description here

出於某種原因,條之間的空間已經消失......但是在適當的地方至少這些價值觀是消極的。