我研究了19世纪几十年的物种灭绝。我正在绘制一个光滑的样条,它显示了灭绝物种的累积值,横跨一组显示每十年绝对值的几条。现在,光滑的样条结束在最后一条的中心,因为值发生在X位置的中心。由于这在视觉上令人不快,我想扩展样条,以便它继续边界的情节。
我尝试了position的论点,但躲闪没有帮助。geom_bspline函数似乎也没有提供解决方案(例如,type="open“没有帮助)。
因此,我正在寻找一个解决方案,允许从ggforce包(或类似的解决方案)扩展geom_bspline。
下面我添加了绘图和绘图的代码示例。

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"))
)发布于 2022-03-11 15:32:20
样条必须在节点之间进行插值,并且除非外推器是端节点,否则不能外推,因此,最简单的方法是创建数据帧的副本,并在x= 11.5或x= 11.7 (只要您认为“看起来对”的地方)添加额外的行和额外的时间度量,但是具有相同的y2值:
dftest2 <- rbind(dftest, tail(dftest, 1))
dftest2$x[nrow(dftest2)] <- 11.7然后你就可以:
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"))
)

请注意,您的代码并不是完全可复制的,因为您的次轴没有包含变量a和b,所以我不得不在这里近似您的第二轴。
https://stackoverflow.com/questions/71440726
复制相似问题