R: How to set up ggplotly to display values โโon a line plot?
My ggplotly plot shows unnecessary information while the cursor is pointing at the line plot. Here's my sample code:
df <- read.table(text="
DateTime,Val1,Val2
1 ,2017-07-01 09:32:00 ,401.7542 ,275.5876
2 ,2017-07-01 09:30:00 ,402.7049 ,359.2615
3 ,2017-07-01 09:29:00 ,402.5912 ,276.4372
4 ,2017-07-01 09:28:00 ,402.7526 ,362.6202
5 ,2017-07-01 09:27:00 ,402.4538 ,361.3867
6 ,2017-07-01 09:26:00 ,401.8847 ,359.6318
7 ,2017-07-01 09:25:00 ,402.2666 ,274.8941
8 ,2017-07-01 09:24:00 ,403.0774 ,277.4844
9 ,2017-07-01 09:23:00 ,403.0516 ,363.3593
10 ,2017-07-01 09:22:00 ,402.5764 ,275.4202
11 ,2017-07-01 09:21:00 ,402.2379 ,275.0550
12 ,2017-07-01 09:20:00 ,401.9060 ,277.2950
13 ,2017-07-01 09:19:00 ,401.9451 ,361.0770
14 ,2017-07-01 09:18:00 ,401.4484 ,361.3591
15 ,2017-07-01 09:17:00 ,402.5519 ,274.8206
16 ,2017-07-01 09:16:00 ,402.1426 ,279.2438
17 ,2017-07-01 09:15:00 ,402.4618 ,360.7491
18 ,2017-07-01 09:14:00 ,403.3124 ,276.4756
19 ,2017-07-01 09:13:00 ,402.3604 ,276.7015
20 ,2017-07-01 09:12:00 ,402.5518 ,363.2422
21 ,2017-07-01 09:11:00 ,404.7830 ,360.2075
22 ,2017-07-01 09:10:00 ,403.7317 ,275.8560
23 ,2017-07-01 09:09:00 ,403.2151 ,276.8633
24 ,2017-07-01 09:08:00 ,404.2897 ,361.6937
25 ,2017-07-01 09:07:00 ,403.8227 ,355.2353
26 ,2017-07-01 09:06:00 ,402.8998 ,276.0700
27 ,2017-07-01 09:05:00 ,403.1328 ,362.2495
28 ,2017-07-01 09:04:00 ,404.1612 ,361.9048
29 ,2017-07-01 09:03:00 ,403.7537 ,274.9531
30 ,2017-07-01 09:02:00 ,402.1621 ,360.7682
31 ,2017-07-01 09:01:00 ,403.0805 ,360.8172
32 ,2017-07-01 09:00:00 ,403.3630 ,276.2874
33 ,2017-07-01 08:59:00 ,402.8351 ,275.9734
34 ,2017-07-01 08:58:00 ,403.6484 ,360.5585
35 ,2017-07-01 08:57:00 ,403.4342 ,357.7776
36 ,2017-07-01 08:56:00 ,402.4444 ,275.8763
37 ,2017-07-01 08:55:00 ,403.2913 ,361.2458
38 ,2017-07-01 08:54:00 ,403.2985 ,276.7728
39 ,2017-07-01 08:53:00 ,403.2600 ,276.6644
40 ,2017-07-01 08:52:00 ,401.9991 ,361.2737
41 ,2017-07-01 08:51:00 ,404.9158 ,358.2727
42 ,2017-07-01 08:50:00 ,403.8922 ,357.0592
43 ,2017-07-01 08:49:00 ,403.0070 ,359.5312
44 ,2017-07-01 08:48:00 ,404.8530 ,360.1790
45 ,2017-07-01 08:47:00 ,404.1543 ,359.4836
46 ,2017-07-01 08:46:00 ,403.9200 ,357.9064
47 ,2017-07-01 08:45:00 ,403.9197 ,358.6364
48 ,2017-07-01 08:44:00 ,406.0925 ,358.6248
49 ,2017-07-01 08:43:00 ,401.5529 ,359.9990
50 ,2017-07-01 08:42:00 ,402.4422 ,356.6060",sep=",",header=TRUE,stringsAsFactors=FALSE)
df$DateTime <- as.POSIXct(df$DateTime)
library(plotly)
library(ggplot2)
library(scales)
p <- ggplot(df, aes(DateTime)) + ylab("Val") +
geom_line(aes(y = Val1, col = "Val1"),lwd=0.5) +
geom_line(aes(y = Val2, col = "Val2"),lwd=0.5) +
scale_x_datetime(labels = date_format("%m-%d %H:%M"),expand = c(0,0)) +
scale_y_continuous(expand = c(0,10)) +
theme(text = element_text(size=9),
axis.text.x = element_text(angle = 90, hjust = 1),
legend.text = element_text(size=10),
panel.background = element_rect(fill = "white", colour = "black"),
panel.grid.major.x = element_line(color = 'grey75', size = 0.2))
ggplotly(p) %>% config(displayModeBar = FALSE) %>% layout(xaxis=list(fixedrange=TRUE)) %>% layout(yaxis=list(fixedrange=TRUE))
So how do you set up a format to display the days of the week instead of the date and hide the extra line, or hide both of those information lines, including DateTime, to show only Val?
Thanks a lot for your help in advance.
source to share
In the call, ggplotly
you can add a "tooltip" argument that determines what values โโare displayed in the tooltip. To customize this tooltip, we can add aesthetics text
to the ggplot call. ggplot ignores this (and throws a warning that it does), but in the call, ggplotly
you can add tooltip = c("y","text")
and it will put text
in the tooltip. Now all we need to do is define text
as the date form you want and we have the required prompt.
Code: Note that I also had to add group = 1
to the aesthetic. If you don't add this, it will try to plot each point as a separate line, resulting in an empty graph.
p <- ggplot(df, aes(DateTime)) + ylab("Val") +
geom_line(aes(y = Val1, col = "Val1", text = paste("DateTime:", format(DateTime, "%A %T")), group = 1),lwd=0.5) +
geom_line(aes(y = Val2, col = "Val2", text = paste("DateTime:", format(DateTime, "%A %T")), group = 1),lwd=0.5) +
scale_x_datetime(labels = date_format("%m-%d %H:%M"),expand = c(0,0)) +
scale_y_continuous(expand = c(0,10)) +
theme(text = element_text(size=9),
axis.text.x = element_text(angle = 90, hjust = 1),
legend.text = element_text(size=10),
panel.background = element_rect(fill = "white", colour = "black"),
panel.grid.major.x = element_line(color = 'grey75', size = 0.2))
ggplotly(p, tooltip = c("y","text")) %>% config(displayModeBar = FALSE) %>% layout(xaxis=list(fixedrange=TRUE)) %>% layout(yaxis=list(fixedrange=TRUE))
source to share
If you recompile your data into a long format, the problem seems to go away.
library(tidyr)
xy <- gather(df, key = group, value = value, -DateTime)
p <- ggplot(xy, aes(DateTime, y = value, color = group)) + ylab("Val") +
geom_line() +
scale_x_datetime(labels = date_format("%m-%d %H:%M"),expand = c(0,0)) +
scale_y_continuous(expand = c(0,10)) +
theme(text = element_text(size=9),
axis.text.x = element_text(angle = 90, hjust = 1),
legend.text = element_text(size=10),
panel.background = element_rect(fill = "white", colour = "black"),
panel.grid.major.x = element_line(color = 'grey75', size = 0.2))
ggplotly(p) %>% config(displayModeBar = FALSE) %>% layout(xaxis=list(fixedrange=TRUE)) %>% layout(yaxis=list(fixedrange=TRUE))
source to share