You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在ggplot中围绕候选点绘制半径0.1的圆形是否可行

解决方案

当然可以实现,你可以借助ggforce包中的geom_circle()函数来绘制指定半径的圆周,步骤如下:

  1. 首先安装并加载ggforce包(如果尚未安装):
install.packages("ggforce")
library(ggforce)
  1. 在你的现有绘图代码中添加geom_circle()图层,针对candidates数据框中的两个候选点绘制圆周:

修改后的完整绘图代码如下:

ggplot(df, aes(lambda, log_likelihood)) +
    geom_line() +
    geom_point(aes(x = lambda_mle, y = log_likelihood[which.min(abs(lambda_values - lambda_mle))], color = "Estimated Value"), size = 3) +
    geom_point(aes(x = 5, y = log_likelihood[which.min(abs(lambda_values - 5))], color = "True Value"), size = 3) +
    geom_point(data = candidates, aes(x = lambda, y = log_likelihood, color = candidate), size = 3) +
    # 添加候选点的圆周
    geom_circle(data = candidates, 
                aes(x0 = lambda, y0 = log_likelihood, r = 0.1, color = candidate),
                linetype = "solid", # 可改为"dashed"使用虚线
                fill = NA) + # 设为NA表示只画圆周,不填充内部
    labs(x = "Lambda", y = "Log-Likelihood", 
         title = "Log-Likelihood Function for Poisson Distribution") +
    theme_minimal() +
    scale_color_manual(values = c("True Value" = "green", "Estimated Value" = "red", "Candidate Solution #1" = "purple", "Candidate Solution #2" = "orange")) +
    geom_text(aes(lambda_mle, log_likelihood[which.min(abs(lambda_values - lambda_mle))], 
                  label = round(lambda_mle, 2), color = "Estimated Value"), hjust = -0.2, vjust = -1.5) +
    geom_text(aes(5, log_likelihood[which.min(abs(lambda_values - 5))], 
                  label = 5, color = "True Value"), hjust = -0.2, vjust = 1.5) +
    geom_text(data = candidates, aes(x = lambda, y = log_likelihood, label = lambda, color = candidate), hjust = 0.5, vjust = -1) +
    xlim(5, 5.5) +
    labs(color = "Legend")

关键说明:

  • geom_circle()的x0和y0参数对应圆心坐标(即候选点的lambda和对数似然值),r参数设置半径为0.1;
  • fill = NA确保只绘制圆周轮廓,不会填充内部区域;
  • linetype参数可根据需求设置为solid(实线)或dashed(虚线);
  • 颜色映射沿用了原有的候选点颜色,保证圆周和对应点颜色一致。

如果不想额外安装包,也可以用annotate()手动添加两个圆周,但这种方式需要逐个指定坐标,不如用geom_circle()结合数据框灵活:

# 手动添加圆周的示例(无需ggforce)
annotate("circle", xmin = 5.1 - 0.1, xmax = 5.1 + 0.1, ymin = candidates$log_likelihood[1] - 0.1, ymax = candidates$log_likelihood[1] + 0.1, color = "purple", fill = NA) +
annotate("circle", xmin = 5.2 - 0.1, xmax = 5.2 + 0.1, ymin = candidates$log_likelihood[2] - 0.1, ymax = candidates$log_likelihood[2] + 0.1, color = "orange", fill = NA)

内容的提问来源于stack exchange,提问作者stats_noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 19:17:02