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

如何用R语言ggplot绘制此类图形?是否可实现?

使用ggplot绘制半圆样式图形

当然可以用ggplot实现这类半圆图形,geom_point()无法实现是因为它仅支持内置的点形状(无半圆内置选项),我们可以通过自定义多边形数据或专用扩展包来实现,以下是两种可行方案:

方案1:手动生成半圆坐标 + geom_polygon

先写一个生成半圆坐标的函数,再结合主数据绘制:

# 生成单个半圆的坐标数据
generate_semicircle <- function(x_center, y_center, radius = 0.5, direction = "top") {
  # 控制半圆方向:top为上半圆,bottom为下半圆
  theta_range <- if (direction == "top") seq(0, pi, length.out = 30) else seq(pi, 2*pi, length.out = 30)
  data.frame(
    x = x_center + radius * cos(theta_range),
    y = y_center + radius * sin(theta_range)
  )
}

# 构造示例数据
set.seed(123)
main_data <- data.frame(
  x = sample(1:10, 5),
  y = sample(1:10, 5),
  group = 1:5  # 用于区分不同半圆
)

# 批量生成所有半圆的坐标
library(purrr)
semicircle_data <- pmap_dfr(main_data, function(x, y, group) {
  sc <- generate_semicircle(x, y)
  sc$group <- group
  sc
})

# 绘制图形
library(ggplot2)
ggplot() +
  geom_polygon(data = semicircle_data, aes(x = x, y = y, group = group), 
               fill = "steelblue", color = "black") +
  # 可选:在半圆中心添加白点
  geom_point(data = main_data, aes(x = x, y = y), size = 3, color = "white") +
  coord_fixed()  # 强制等比例坐标,避免半圆变形

方案2:使用ggforce包快速绘制圆弧

ggforce扩展包提供了geom_arc()函数,可以直接绘制指定角度范围的圆弧(半圆):

library(ggplot2)
library(ggforce)

ggplot(main_data, aes(x0 = x, y0 = y, r = 0.5)) +
  # start和end控制圆弧角度:0到pi为上半圆
  geom_arc(aes(start = 0, end = pi), fill = "steelblue", color = "black") +
  geom_point(aes(x = x, y = y), size = 3, color = "white") +
  coord_fixed() +
  theme_minimal()

关键说明

  • geom_point()仅支持R内置的点形状(通过pch参数选择),没有预设的半圆形状,因此需要用多边形或圆弧类图层实现自定义形状。
  • coord_fixed()必须添加,否则坐标轴比例不一致会导致半圆被拉伸成椭圆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:41:42