ggplotly с geom_bar показывает неправильные значения оси Y при перемещении курсора на панель - PullRequest
1 голос
/ 20 сентября 2019

У меня есть следующий код, создающий гистограмму:

require(data.table)
require(plotly)
require(ggplot2)

df1 <- data.table(Time = seq(50, 290, 30), Enter = c(155000, 400000, 950000, 950000, 1000000, 1100000, 1100000, 1100000, 1150000), 
Exit = c(150000, 165000, 167000, 225000, 500000, 560000, 562000, 564000, 590000))

df1 <- melt(df1[,c('Time','Enter','Exit')],id.vars = 1)
df1$Time <- as.factor(df1$Time)
df1$value <- format(df1$value, format="f", big.mark=",", scientific = F, digits = 0)
# Create Barplot of In and outflows
ggplotly(tooltip = c("y", "x", "colour"), p =
           ggplot(df1, aes(x = Time, y = value)) + 
           geom_bar(aes(fill = variable), stat = 'identity', position = 'dodge', colour = 'black') + 
           scale_fill_manual(name = "", labels = c('Enter', 'Exit'), values= c('chartreuse4', 'brown')) +
           labs(x = 'Time', y ='Value')) 

Когда я перемещаю курсор мыши на столбцы, чтобы увидеть, какое значение на панели не отображается (т. Е. Для первой зеленой полосы)155 000 но 2. Почему это так и как я могу исправить это так, чтобы оно показывало правильное число?

1 Ответ

3 голосов
/ 20 сентября 2019

Значение должно быть преобразовано в коэффициент, который я считаю!Тогда все должно работать нормально.

Библиотеки и данные:

require(data.table)
require(plotly)
require(ggplot2)

df1 <- data.frame(Time = seq(50, 290, 30), Enter = c(155000, 400000, 950000, 950000, 1000000, 1100000, 1100000, 1100000, 1150000), 
                  Exit = c(150000, 165000, 167000, 225000, 500000, 560000, 562000, 564000, 590000))

Решение 1: Используйте value в формате фактора:

   df1 <- melt(df1[,c('Time','Enter','Exit')],id.vars = 1)
    df1$Time <- factor(df1$Time)
    #df1$value <- format(df1$value, format="f", big.mark=",", scientific = F, digits = 0)

    # Create Barplot of In and outflows
    ggplotly(tooltip = c("y", "x", "colour"), p =
               ggplot(df1, aes(x = Time, y = value)) + 
               geom_bar(aes(fill = variable), stat = 'identity', position = 'dodge', colour = 'black') + 
               scale_fill_manual(name = "", labels = c('Enter', 'Exit'), values= c('chartreuse4', 'brown')) +
               labs(x = 'Time', y ='Value')) 

Решение 2:чтобы сохранить value в числовом формате, но все равно правильный tooltip, разделенный запятой, используйте следующую версию:

df1 <- melt(df1[,c('Time','Enter','Exit')],id.vars = 1)
df1$Time <- factor(df1$Time)
df1$value <- format(df1$value, format="f", big.mark=",", scientific = F, digits = 0)

# Create Barplot of In and outflows
p=ggplot(df1, aes(x = Time, y = value, text = paste0("Value:", value)) ) + 
           geom_bar(aes(fill = variable), stat = 'identity', position = 'dodge', colour = 'black') + 
           scale_fill_manual(name = "", labels = c('Enter', 'Exit'), values= c('chartreuse4', 'brown')) +
           labs(x = 'Time', y ='Value')

ggplotly(p, tooltip = c("x","text"))
...