闪亮的鼠标点击与 ggplot2 饼图
Shiny Mouse Click with ggplot2 pie chart
我知道我可以使用 ggplot2 生成的堆叠条形图获得 xy 鼠标点击坐标:
data <- data.frame(pie = c(0.25,0.25,0.25,0.25))
library(ggplot2)
ui <- fluidPage(
plotOutput('pie', click = "plot_click"),
verbatimTextOutput('mouse')
)
server <- function(input, output) {
output$pie <- renderPlot({
ggplot(data, aes(x = factor(1), y = pie, fill = row.names(data)))
+ geom_bar(stat = "identity")
})
output$mouse <- renderPrint({
str(input$plot_click)
})
}
shinyApp(ui=ui, server=server)
当我 运行 并点击刚才时,我得到了这种输出,特别是一个列表,其中包含我在图中点击的相对 xy 坐标:
List of 7
$ x : num 0.887
$ y : num 0.116
$ mapping:List of 3
..$ x : chr "factor(1)"
..$ y : chr "pie"
..$ fill: chr "row.names(data)"
$ domain :List of 4
..$ left : num 0.5
..$ right : num 1.5
..$ bottom: num -0.05
..$ top : num 1.05
$ range :List of 4
..$ left : num 44.9
..$ right : num 818
..$ bottom: num 365
..$ top : num 5.48
$ log :List of 2
..$ x: NULL
..$ y: NULL
$ .nonce : num 0.797
但是,当我将其转换为饼图而不是以下内容时,我没有得到 x 和 y 为 int 0 元素的列表。我正在使用这段代码(它只是将 coord_polar(theta = "y") 添加到 ggplot):
data <- data.frame(pie = c(0.25,0.25,0.25,0.25))
library(ggplot2)
ui <- fluidPage(
plotOutput('pie', click = "plot_click"),
verbatimTextOutput('mouse')
)
server <- function(input, output) {
output$pie <- renderPlot({
ggplot(data, aes(x = factor(1), y = pie, fill = row.names(data)))
+ geom_bar(stat = "identity")
+ coord_polar(theta = "y")
})
output$mouse <- renderPrint({
str(input$plot_click)
})
}
shinyApp(ui=ui, server=server)
点击绘图后会得到这样的结果:
List of 7
$ x : int 0
$ y : int 0
$ mapping:List of 3
..$ x : chr "factor(1)"
..$ y : chr "pie"
..$ fill: chr "row.names(data)"
$ domain :List of 4
..$ left : NULL
..$ right : NULL
..$ bottom: NULL
..$ top : NULL
$ range :List of 4
..$ left : num 31.9
..$ right : num 818
..$ bottom: num 373
..$ top : num 5.48
$ log :List of 2
..$ x: NULL
..$ y: NULL
$ .nonce : num 0.964
我不熟悉将这些鼠标事件用于绘图。有什么方法可以获取 ggplot 饼图的鼠标点击坐标吗?如果不可能,有没有办法使用 javascript 来隐藏我单击以绘制坐标的位置的像素坐标?或者,是否有更好的图形系统可以支持我可以在 shiny 中使用的这种功能?
提前致谢!
如果不求助于 R 之外的图形和 Web 编程,这个问题似乎没有一个简单的答案。
我的解决方案是为 html 的绘图创建一个图例,用户可以在其中单击图例的一部分以导出他们选择的数据。
我知道我可以使用 ggplot2 生成的堆叠条形图获得 xy 鼠标点击坐标:
data <- data.frame(pie = c(0.25,0.25,0.25,0.25))
library(ggplot2)
ui <- fluidPage(
plotOutput('pie', click = "plot_click"),
verbatimTextOutput('mouse')
)
server <- function(input, output) {
output$pie <- renderPlot({
ggplot(data, aes(x = factor(1), y = pie, fill = row.names(data)))
+ geom_bar(stat = "identity")
})
output$mouse <- renderPrint({
str(input$plot_click)
})
}
shinyApp(ui=ui, server=server)
当我 运行 并点击刚才时,我得到了这种输出,特别是一个列表,其中包含我在图中点击的相对 xy 坐标:
List of 7
$ x : num 0.887
$ y : num 0.116
$ mapping:List of 3
..$ x : chr "factor(1)"
..$ y : chr "pie"
..$ fill: chr "row.names(data)"
$ domain :List of 4
..$ left : num 0.5
..$ right : num 1.5
..$ bottom: num -0.05
..$ top : num 1.05
$ range :List of 4
..$ left : num 44.9
..$ right : num 818
..$ bottom: num 365
..$ top : num 5.48
$ log :List of 2
..$ x: NULL
..$ y: NULL
$ .nonce : num 0.797
但是,当我将其转换为饼图而不是以下内容时,我没有得到 x 和 y 为 int 0 元素的列表。我正在使用这段代码(它只是将 coord_polar(theta = "y") 添加到 ggplot):
data <- data.frame(pie = c(0.25,0.25,0.25,0.25))
library(ggplot2)
ui <- fluidPage(
plotOutput('pie', click = "plot_click"),
verbatimTextOutput('mouse')
)
server <- function(input, output) {
output$pie <- renderPlot({
ggplot(data, aes(x = factor(1), y = pie, fill = row.names(data)))
+ geom_bar(stat = "identity")
+ coord_polar(theta = "y")
})
output$mouse <- renderPrint({
str(input$plot_click)
})
}
shinyApp(ui=ui, server=server)
点击绘图后会得到这样的结果:
List of 7
$ x : int 0
$ y : int 0
$ mapping:List of 3
..$ x : chr "factor(1)"
..$ y : chr "pie"
..$ fill: chr "row.names(data)"
$ domain :List of 4
..$ left : NULL
..$ right : NULL
..$ bottom: NULL
..$ top : NULL
$ range :List of 4
..$ left : num 31.9
..$ right : num 818
..$ bottom: num 373
..$ top : num 5.48
$ log :List of 2
..$ x: NULL
..$ y: NULL
$ .nonce : num 0.964
我不熟悉将这些鼠标事件用于绘图。有什么方法可以获取 ggplot 饼图的鼠标点击坐标吗?如果不可能,有没有办法使用 javascript 来隐藏我单击以绘制坐标的位置的像素坐标?或者,是否有更好的图形系统可以支持我可以在 shiny 中使用的这种功能?
提前致谢!
如果不求助于 R 之外的图形和 Web 编程,这个问题似乎没有一个简单的答案。
我的解决方案是为 html 的绘图创建一个图例,用户可以在其中单击图例的一部分以导出他们选择的数据。