闪亮上下文中 ggplotly 的问题
Issues with ggplotly within Shiny context
使用下面的代码,我可以创建图中所示的绘图。我正在尝试解决以下问题:
1- 如何在标题和情节之间放置图例。我想要水平格式的图例,而不是当前的垂直格式。
2- 我怎样才能将情节标题加粗并居中?
3- 如何根据“残疾”变量在 geom_point 函数中使用不同的形状?
4- 如何重命名标签,使其显示为“Age at Death”而不是当前名称:“AgeatDeath”?
谢谢,
纳德
IDD_line <-
ggplot(IDD_plot) +
geom_line(aes(x = Year, y = AgeatDeath, color = Disability), size = 1) +
geom_point(aes(x = Year,
y = AgeatDeath,
color = Disability),
size = 1.5,
shape = 21) +
scale_x_continuous(breaks = seq(2008, 2017, 1)) +
labs(
x = "Year",
y = "Age at Death",
caption = (""),
face = "bold"
) +
theme_bw() +
scale_y_continuous(breaks = seq(35, 80, 5)) +
ggtitle(paste("Age of Death by Year (2008 to 2017)")) +
theme(
legend.title = element_blank(),
axis.text = (blue.bold.10.text),
legend.position = "top"
)
output$IDD_plot <- renderPlotly(ggplotly(IDD_line) %>%
config(displayModeBar = F))
这比我最初预期的要难一些。也许其他人会想出一些更好的解决方案,但这就是我所拥有的。
- 如何在标题和情节之间放置图例。我想要水平格式的图例,而不是当前的垂直格式。
您可以在调用 ggplotly
后在 layout
中执行此操作。要放入水平形式,请使用 orientation = "h"
。如果你指定 y = 1.2
这将在图上方(如果你只是将 yanchor
设置在“顶部”这将在靠近顶部的图本身上)。
此外,您需要添加额外的边距,这样图例就不会与标题重叠。使用 margin
设置左、右、下和上边距(l
、r
、b
和 t
)。
layout(legend = list(x = 0, y = 1.2, orientation = "h"),
margin = list(l = 50, r = 50, b = 100, t = 100)...
- 如何加粗并居中标题?
要加粗标题,可以添加HTML标签,比如ggtitle
中的<b>title</b>
。要使标题居中,请将其添加到 layout
中,如 #1 中那样,使用 xanchor
:
layout(legend = list(x = 0, y = 1.2, orientation = "h"),
margin = list(l = 50, r = 50, b = 100, t = 100),
title = list(xanchor = "center", x = .5))
- 如何根据“残疾”变量在geom_point函数中使用不同的形状?
要使形状取决于“残疾”,您的审美需要 shape = Disability
。棘手的部分是,如果您在 geom_point
内的 aes
内执行此操作,您将在转换为 ggplotly
后得到重复的图例。您可以在 geom_point
.
之外使用单独的 aes
来解决这个问题
有关详细信息,请参阅 this github issue comment。
- 如何重命名标签,使其显示为“死亡年龄”而不是当前名称:“AgeatDeath”?
一种方法是在您的 aes
中使用 text
并以这种方式阐明您的标签。这将包括带有 <br>
的换行符,用于整数值的 %d
和用于字符串(对于 Disability)的 %s
:
text = sprintf("Year: %d<br>Age at Death: %d<br>Disability: %s",
Year, AgeatDeath, Disability)
然后,在您的 ggplotly
调用中,包括 tooltip = "text"
。
所以把这些放在一起,你有:
IDD_line <- ggplot(IDD_plot) +
aes(color = Disability,
shape = Disability,
group = Disability,
text = sprintf("Year: %d<br>Age at Death: %d<br>Disability: %s",
Year, AgeatDeath, Disability)) +
geom_line(aes(x = Year, y = AgeatDeath), size = 1) +
geom_point(aes(x = Year,
y = AgeatDeath),
size = 1.5) +
scale_x_continuous(breaks = seq(2008, 2017, 1)) +
labs(
x = "Year",
y = "Age at Death",
caption = (""),
face = "bold"
) +
theme_bw() +
scale_y_continuous(breaks = seq(35, 80, 5)) +
ggtitle(paste("<b>Age of Death by Year (2008 to 2017)</b>")) +
theme(
legend.title = element_blank(),
axis.text = (blue.bold.10.text) #,
#legend.position = "top"
)
而且,
output$IDD_plot <- renderPlotly(
ggplotly(IDD_line, tooltip = "text") %>%
config(displayModeBar = F) %>%
layout(legend = list(x = 0, y = 1.2, orientation = "h"),
margin = list(l = 50, r = 50, b = 100, t = 100),
title = list(xanchor = "center", x = .5))
)
使用下面的代码,我可以创建图中所示的绘图。我正在尝试解决以下问题:
1- 如何在标题和情节之间放置图例。我想要水平格式的图例,而不是当前的垂直格式。
2- 我怎样才能将情节标题加粗并居中?
3- 如何根据“残疾”变量在 geom_point 函数中使用不同的形状?
4- 如何重命名标签,使其显示为“Age at Death”而不是当前名称:“AgeatDeath”?
谢谢,
纳德
IDD_line <-
ggplot(IDD_plot) +
geom_line(aes(x = Year, y = AgeatDeath, color = Disability), size = 1) +
geom_point(aes(x = Year,
y = AgeatDeath,
color = Disability),
size = 1.5,
shape = 21) +
scale_x_continuous(breaks = seq(2008, 2017, 1)) +
labs(
x = "Year",
y = "Age at Death",
caption = (""),
face = "bold"
) +
theme_bw() +
scale_y_continuous(breaks = seq(35, 80, 5)) +
ggtitle(paste("Age of Death by Year (2008 to 2017)")) +
theme(
legend.title = element_blank(),
axis.text = (blue.bold.10.text),
legend.position = "top"
)
output$IDD_plot <- renderPlotly(ggplotly(IDD_line) %>%
config(displayModeBar = F))
这比我最初预期的要难一些。也许其他人会想出一些更好的解决方案,但这就是我所拥有的。
- 如何在标题和情节之间放置图例。我想要水平格式的图例,而不是当前的垂直格式。
您可以在调用 ggplotly
后在 layout
中执行此操作。要放入水平形式,请使用 orientation = "h"
。如果你指定 y = 1.2
这将在图上方(如果你只是将 yanchor
设置在“顶部”这将在靠近顶部的图本身上)。
此外,您需要添加额外的边距,这样图例就不会与标题重叠。使用 margin
设置左、右、下和上边距(l
、r
、b
和 t
)。
layout(legend = list(x = 0, y = 1.2, orientation = "h"),
margin = list(l = 50, r = 50, b = 100, t = 100)...
- 如何加粗并居中标题?
要加粗标题,可以添加HTML标签,比如ggtitle
中的<b>title</b>
。要使标题居中,请将其添加到 layout
中,如 #1 中那样,使用 xanchor
:
layout(legend = list(x = 0, y = 1.2, orientation = "h"),
margin = list(l = 50, r = 50, b = 100, t = 100),
title = list(xanchor = "center", x = .5))
- 如何根据“残疾”变量在geom_point函数中使用不同的形状?
要使形状取决于“残疾”,您的审美需要 shape = Disability
。棘手的部分是,如果您在 geom_point
内的 aes
内执行此操作,您将在转换为 ggplotly
后得到重复的图例。您可以在 geom_point
.
aes
来解决这个问题
有关详细信息,请参阅 this github issue comment。
- 如何重命名标签,使其显示为“死亡年龄”而不是当前名称:“AgeatDeath”?
一种方法是在您的 aes
中使用 text
并以这种方式阐明您的标签。这将包括带有 <br>
的换行符,用于整数值的 %d
和用于字符串(对于 Disability)的 %s
:
text = sprintf("Year: %d<br>Age at Death: %d<br>Disability: %s",
Year, AgeatDeath, Disability)
然后,在您的 ggplotly
调用中,包括 tooltip = "text"
。
所以把这些放在一起,你有:
IDD_line <- ggplot(IDD_plot) +
aes(color = Disability,
shape = Disability,
group = Disability,
text = sprintf("Year: %d<br>Age at Death: %d<br>Disability: %s",
Year, AgeatDeath, Disability)) +
geom_line(aes(x = Year, y = AgeatDeath), size = 1) +
geom_point(aes(x = Year,
y = AgeatDeath),
size = 1.5) +
scale_x_continuous(breaks = seq(2008, 2017, 1)) +
labs(
x = "Year",
y = "Age at Death",
caption = (""),
face = "bold"
) +
theme_bw() +
scale_y_continuous(breaks = seq(35, 80, 5)) +
ggtitle(paste("<b>Age of Death by Year (2008 to 2017)</b>")) +
theme(
legend.title = element_blank(),
axis.text = (blue.bold.10.text) #,
#legend.position = "top"
)
而且,
output$IDD_plot <- renderPlotly(
ggplotly(IDD_line, tooltip = "text") %>%
config(displayModeBar = F) %>%
layout(legend = list(x = 0, y = 1.2, orientation = "h"),
margin = list(l = 50, r = 50, b = 100, t = 100),
title = list(xanchor = "center", x = .5))
)