Reputation: 3162
I would like to create a bar plot
(with the plotly
package), which (for some months) would have red horizontal line
(gain to obtain). Plots below show my problem more precisely, I hope.
Code and data needed to obtain first plot:
library("plotly")
library("dplyr")
data.frame(miesiac_label = as.character(as.roman(c(1:12))),
miesiac = c(1:12),
ile = c(12000, 12100, 11100, 12000, 12000, 11900, 12200, 12100, 6000, 12100, 12100, 12100),
gain = c(rep(NA, 7), 11000, 12000, 12000, 12000, 12000)) -> dane
dane$miesiac_label <- factor(dane$miesiac_label, levels = dane[["miesiac_label"]])
plot_ly(dane) %>%
add_trace(x = ~miesiac_label, y = ~ile,
type = 'bar', marker = list(color = '#99d3df')) %>%
add_trace(x = ~miesiac_label, y = ~gain, name = 'Gain',
type = "scatter", mode='lines+markers', marker = list(color = 'red'),
line = list(color = 'red'))
I think that I should have a continuous scale to do this and after this just change x axis labels
, but I don't know how to change those labels (I've tried to find it in google first, of course)...
Thanks a lot for your help!
Upvotes: 2
Views: 3025
Reputation: 9836
Would something like that work for you. You could adjust the numbers in add_segments
.
a <- list(
title = "miesiac_label",
showticklabels = TRUE,
tickmode= "array",
ticktext = as.character(as.roman(c(1:12))),
tickvals = c(1:12)
)
plot_ly(dane) %>%
add_bars(x = ~miesiac, y = ~ile) %>%
add_segments(x = 7.5, xend = 8.5, y = 10000, yend = ~10000, line = list(dash = "dash")) %>%
add_segments(x = 8.5, xend = 12.5, y = 12000, yend = ~12000, line = list(dash = "dash")) %>%
layout(showlegend = FALSE, xaxis = a)
Upvotes: 2
Reputation: 1293
I have managed to construct what you want using ggplot
and the fantastic ggplotly()
Doing it normally for ggplot standards leads to hideous tooltips on hover, but that can be tweaked with the text
aesthetic and the tooltip
argument in the ggplotly
call
for example:
ggplot(dane, aes(x = miesiac_label, y = ile)) +
geom_bar(aes(text = paste("x:", miesiac_label, "y:",ile)),
stat = "identity", fill = "#99d3df") +
geom_segment(aes(x = miesiac - 0.5, xend = miesiac + 0.5,
y = gain, yend = gain,
text = paste0("gain: ",gain))
, colour = "red"
, linetype = 2)
ggplotly(tooltip = "text")
Which results in the following plot:
Upvotes: 1