问题
For some reason, when converting in R a ggplot2 bar chart (geom_bar) into an interactive plot using plotly's ggplotly function, ggplotly "forces" the bars to stick together, even if the width parameter is specified:
library(plotly)
library(ggplot2)
DF <- read.table(text="Rank F1 F2 F3
1 500 250 50
2 400 100 30
3 300 155 100
4 200 90 10", header=TRUE)
library(reshape2)
DF1 <- melt(DF, id.var="Rank")
p <- ggplot(DF1, aes(x = Rank, y = value, fill = variable)) +
geom_bar(stat = "identity")
ggplotly(p)
p <- ggplot(DF1, aes(x = Rank, y = value, fill = variable)) +
geom_bar(stat = "identity", width = 0.4)
ggplotly(p)
It also reverses ggplot2s default colors order for some reason (although keeping the order in the legend...), but I can handle this.
Any idea hot to tell ggplotly to not stick my bars together, like the default
ggplot2 behavior?
回答1:
Any idea hot to tell ggplotly to not stick my bars together, like the default ggplot2 behavior?
ggplotly sets bargap to 0, you could set to your desired value via layout
ggplotly(p) %>% layout(bargap=0.15)
It also reverses ggplot2s default colors order for some reason (although keeping the order in the legend...), but I can handle this.
Let's get that fixed as well. You can change the order afterwards by flipping the bars and reversing the legend.
gp <- ggplotly(p) %>% layout(bargap = 0.15, legend = list(traceorder = 'reversed'))
traces <- length(gp[['x']][[1]])
for (i in 1:floor(traces / 2)) {
temp <- gp[['x']][[1]][[i]]
gp[['x']][[1]][[i]] <- gp[['x']][[1]][[traces + 1 - i]]
gp[['x']][[1]][[traces + 1 - i]] <- temp
}
来源:https://stackoverflow.com/questions/42813369/r-plotly-how-to-keep-width-parameter-of-ggplot2-geom-bar-when-using-ggplotly