首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在条形图中扩展geom_bspline?

如何在条形图中扩展geom_bspline?
EN

Stack Overflow用户
提问于 2022-03-11 15:16:42
回答 1查看 31关注 0票数 1

我研究了19世纪几十年的物种灭绝。我正在绘制一个光滑的样条,它显示了灭绝物种的累积值,横跨一组显示每十年绝对值的几条。现在,光滑的样条结束在最后一条的中心,因为值发生在X位置的中心。由于这在视觉上令人不快,我想扩展样条,以便它继续边界的情节。

我尝试了position的论点,但躲闪没有帮助。geom_bspline函数似乎也没有提供解决方案(例如,type="open“没有帮助)。

因此,我正在寻找一个解决方案,允许从ggforce包(或类似的解决方案)扩展geom_bspline。

下面我添加了绘图和绘图的代码示例。

代码语言:javascript
复制
library("tidyverse")
library("ggforce")


## DATASET
dftest <- tibble(
  x = seq(1,11,1),
  y1 = c(3,   0 ,  1  , 0 ,  2   ,0,  20, 126, 426, 400 , 37),
  y2 = c( 3 ,3   , 4 ,   4 ,   6 ,   6 ,  26,  152 , 578 , 978, 1015)
)


###### Figure ------
ggplot(dftest, aes(x=x)) + 
  
  ### BARS
  geom_bar(aes(y= y1), fill="#FC301A", stat="identity") +
  
  ### SPLINE
  geom_bspline(aes(x=x,y=y2),data=dftest)+
  
  ### SCALES
  scale_x_discrete(name ="",  drop = FALSE) + 
  scale_y_continuous(expand = c(0,0),
                     limits = c(0, 1200),
                     breaks = seq(0,1200,200),name = "Kumulativ",
                     sec.axis = sec_axis(~ ((. - a)/b)+2,
                                         name = "Absolut"),
                     labels=scales::comma_format(big.mark = ".")) +
  
  ### THEME
  theme_classic()+
  theme(
    panel.grid.major.y = element_line(colour = "grey70", size = 0.2),  # linien
    
    ###axis
    axis.ticks.length = unit(1, "mm"),
    
    axis.text.x = element_text(family = "Helvetica",  size=10,angle = 90,vjust = 0.5,
                               margin = unit(c(0.2,0,0,0),"cm")),
    axis.text.y = element_text(family = "Helvetica",  size=10),
    axis.text.y.right = element_text(color = "red",family = "Helvetica",  size=10),
    
    
    axis.title.y.right =  element_text(color = "red",family = "Helvetica",  size=10,
                                       margin = unit(c(0,0,0,0.25),"cm")),
    axis.title.y.left =  element_text(family = "Helvetica",  size=10, 
                                      margin = unit(c(0,0.25,0,0),"cm"))
    
  )
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-11 15:32:20

样条必须在节点之间进行插值,并且除非外推器是端节点,否则不能外推,因此,最简单的方法是创建数据帧的副本,并在x= 11.5或x= 11.7 (只要您认为“看起来对”的地方)添加额外的行和额外的时间度量,但是具有相同的y2值:

代码语言:javascript
复制
dftest2 <- rbind(dftest, tail(dftest, 1))
dftest2$x[nrow(dftest2)] <- 11.7

然后你就可以:

代码语言:javascript
复制
ggplot(dftest, aes(x = x)) + 
  geom_bar(aes(y= y1), fill="#FC301A", stat="identity") +
  geom_bspline(aes(x = x, y = y2), data = dftest2) +
  scale_x_discrete(name ="",  drop = FALSE) + 
  scale_y_continuous(expand = c(0,0),
                     limits = c(0, 1200),
                     breaks = seq(0,1200,200),name = "Kumulativ",
                     sec.axis = sec_axis(~ ((. - 0)/2.3)+2,
                                         name = "Absolut"),
                     labels=scales::comma_format(big.mark = ".")) +
  theme_classic()+
  theme(
    panel.grid.major.y = element_line(colour = "grey70", size = 0.2),
    axis.ticks.length = unit(1, "mm"),
    
    axis.text.x = element_text(family = "Helvetica",  
                               size=10,angle = 90, vjust = 0.5,
                               margin = unit(c(0.2,0,0,0),"cm")),
    axis.text.y = element_text(family = "Helvetica",size=10),
    axis.text.y.right = element_text(color = "red",
                                     family = "Helvetica",  size = 10),
    axis.title.y.right =  element_text(color = "red",family = "Helvetica",  
                                       size=10,
                                       margin = unit(c(0,0,0,0.25),"cm")),
    axis.title.y.left =  element_text(family = "Helvetica",  size=10, 
                                      margin = unit(c(0,0.25,0,0),"cm"))
  )

请注意,您的代码并不是完全可复制的,因为您的次轴没有包含变量ab,所以我不得不在这里近似您的第二轴。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71440726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档