【问题标题】:Select multiple points on the ggplot and draw line through them [closed]在ggplot上选择多个点并通过它们画线[关闭]
【发布时间】:2020-05-01 16:09:30
【问题描述】:

有什么方法可以在 ggplot 或 ggplotly 生成的绘图上选择一些点,然后这些点通过线连接。

我想在我正在开发的闪亮应用程序中使用它,其中应用程序正在生成一个图形,我希望用户选择散点图上的一些点,然后应用程序应该能够连接这些点逐行逐点。

【问题讨论】:

    标签: r ggplot2 shiny ggplotly


    【解决方案1】:

    用户将连接多少点?你用的是什么通用界面?

    我假设您将获取“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)
    

    【讨论】:

    • 我希望用户在图上选择至少 5 个点,我闪亮的应用程序应该能够将它们全部连接起来。你应该知道的另一件事是,用户在闪亮的应用程序中上传数据文件,在应用程序中以表格形式呈现,然后通过 plotly 绘制图表。
    • 因此,编码应该全部采用变量的形式,因为用户不会为每个图选择相同的点。用户应该能够选择任何随机的 5 个点,我正在考虑引入一个名为“连接”的按钮,按下该按钮后,所有选定的点都应该连接起来。
    猜你喜欢
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2016-06-04
    • 2014-11-03
    • 2022-10-24
    • 1970-01-01
    • 2015-06-06
    相关资源
    最近更新 更多