【发布时间】:2020-05-01 16:09:30
【问题描述】:
有什么方法可以在 ggplot 或 ggplotly 生成的绘图上选择一些点,然后这些点通过线连接。
我想在我正在开发的闪亮应用程序中使用它,其中应用程序正在生成一个图形,我希望用户选择散点图上的一些点,然后应用程序应该能够连接这些点逐行逐点。
【问题讨论】:
有什么方法可以在 ggplot 或 ggplotly 生成的绘图上选择一些点,然后这些点通过线连接。
我想在我正在开发的闪亮应用程序中使用它,其中应用程序正在生成一个图形,我希望用户选择散点图上的一些点,然后应用程序应该能够连接这些点逐行逐点。
【问题讨论】:
用户将连接多少点?你用的是什么通用界面?
我假设您将获取“point1”和“point2”的 x,y 坐标。以下一种方法可能会有所帮助:
# example data
df <- data.frame(x=sample(1:10, 5) ,y=sample(1:10, 5))
# example plot without lines
ggplot(df, aes(x,y)) + xlim(0,10) + ylim(0,10) +
geom_point(color='red', size=3)
这是一个示例函数,它将输入两个点(x1,y1 和 x2,y2),然后通过geom_segment 连接它们。如果您想要一条曲线,您可以使用geom_curve,并可能使用一些逻辑来决定如何绘制曲线。
drawPlot <- function(x1, y1, x2, y2) {
ggplot(df, aes(x,y)) + xlim(0,10) + ylim(0,10) +
geom_segment(aes(x=x1, y=y1, xend=x2, yend=y2)) +
geom_point(color='red', size=3)
}
让我们传递两点:
drawPlot(3,9, 7,6)
上述方案的问题在于它只连接了两个点。不确定这是否适合您,因此替代的可扩展版本是连接多个点:
drawPlotLine <- function(user_selected) {
ggplot(df, aes(x,y)) + xlim(0,10) + ylim(0,10) +
geom_line(data=user_selected) +
geom_point(color='red', size=3)
}
在这里,您将传递用户选择的点子集。根据您的偏好,用户可以“刷选”(用框拖动选择)或单击单个点来选择它们。将这些选定点保存为原始数据帧的子集,然后将其传递给geom_line:
user_df <- df[c(1,4,3),]
drawPlotLine(user_df)
【讨论】: