像在 Excel 中一样平滑(ggplot2 + plotly)

Mat*_*sko 3 r ggplot2 plotly

我想使用 ggplot2 和 plotly 在 R 中模拟 Excel 平滑样式。

套餐

library(dplyr)
library(tibble)
library(ggplot2)
library(plotly)
library(ggforce) #only for geom_bspline() in example below (other smoothing functions can be used)
library(scales) #only for percent() formatting below 
Run Code Online (Sandbox Code Playgroud)

示例数据集

df <- tibble(Group = rep(LETTERS[1:2], each = 10),
             x = rep(1:10, 2),
             y = c(2, 5, 9, 15, 19, 19, 15, 9, 5, 2,
                   1, 0, 3, 2, 3, 4, 14, 24, 24, 25)*0.01)
Run Code Online (Sandbox Code Playgroud)

我想要的是

在此处输入图片说明

到目前为止我所拥有的

(df %>%
    ggplot(aes(x, y)) +
    geom_point(aes(color = Group)) +
    ggforce::geom_bspline(aes(group = Group, color = Group)) +
    scale_y_continuous(limits = c(0, 0.35), labels = scales::percent) +
    scale_x_continuous(breaks = 1:10, minor_breaks = NULL) +
    theme_minimal()) %>%
  ggplotly()
Run Code Online (Sandbox Code Playgroud)

我知道过度拟合是不好的,但我需要两条线直接穿过点(就像在 Excel 中一样)。

解决方案可能是纯情节的(比 ggplotly() 转换提供更多控制)。

附加,不需要:仅显示点的标签(非平滑曲线)

abh*_*ekG 6

您可以添加网站中提到的 geom_xspline 函数:https ://www.r-bloggers.com/roll-your-own-stats-and-geoms-in-ggplot2-part-1-splines/

之后使用代码:

p <- ggplot(df, aes(x, y, group=Group, color=factor(Group))) +
  geom_point(color="black") +
  geom_xspline(size=0.5)+
  geom_point(aes(color = Group)) +
  scale_y_continuous(limits = c(0, 0.35), labels = scales::percent) +
  scale_x_continuous(breaks = 1:10, minor_breaks = NULL) +
  theme_minimal()+
  geom_text(aes(label=y),hjust=1, vjust=-1)
p
Run Code Online (Sandbox Code Playgroud)

输出将是: 绘图图像

希望这可以帮助!

  • 我在“ggalt”包中找到了“geom_xspline()”的实现。它确实满足了我的需求 https://answers.microsoft.com/en-us/office/forum/office_2007-excel/how-does-excel-plot-smooth-curves/c751e8ff-9f99-4ac7-a74a-fba41ac80300指出 Excel 使用 Catmull-Rom 样条平滑。因此,使用“geom_xspline()”和“spline_shape = -0.5”可以完成这项工作。不幸的是,这个几何图形尚未在“plotly”中实现。 (4认同)