gpt4 book ai didi

r - ggplot : Abbreviating horizontal grid lines after extending x-scale limits

转载 作者:行者123 更新时间:2023-12-04 09:15:17 27 4
gpt4 key购买 nike

扩展水平轴范围后如何缩写ggplot的水平网格线?我正在扩展范围以显示 geom_text 元素。

我想在 my line graph 中制作水平网格线在 x >= 2014 之后消失。我使用 geom_text 来标记 geom_lines 之一。这是可能的,还是开始时扩展范围是错误的方法?

这是我创建情节的方式:

library(quantmod)
library(plyr)
library(ggplot2)

abblist <- list(CA="California",IL="Illinois",TX="Texas",NY="New York")

cleandata <- function(thelist,i) {
abbname <- names(thelist)[[i]]
fullname <- thelist[[i]]
seriesname <- paste(abbname, "UR", sep = "")
df <- apply.yearly(getSymbols(seriesname,src='FRED',auto.assign=F),mean)
df <- data.frame(year=time(df),coredata(df))
df$year <- as.numeric(format(df$year, "%Y"))
names(df)[names(df)==seriesname] <- "urate"
df$state <- as.factor(fullname)
df
}

urates <- rbind.fill(lapply(seq_along(abblist), cleandata, thelist=abblist))

mytheme <- theme_grey() +
theme(
panel.background = element_rect(fill="white"),
legend.position="none",
axis.title.x = element_blank(),
axis.title.y = element_blank()
)

p <- ggplot(urates, aes(x=year, y=urate)) +
geom_line(data=subset(urates,state!="New York"), aes(group=state), color="grey") +
geom_line(data=subset(urates,state=="New York"), color="maroon") +
geom_text(data=subset(urates,year==max(year) & state == "New York"), aes(label=state,x=year+0.25), hjust=0, color="grey20", size=3) +
mytheme +
scale_x_continuous(limits=c(2000,2015),breaks=seq(2000,2014,2),minor_breaks=seq(2001,2013,2))

最佳答案

借鉴this answer的一些想法,这里有一些可能对你有用的东西。

首先计算 NY 标签的值

ny.year <- max(urates$year)
ny.val <- urates$urate[urates$year==ny.year & urates$state=="New York"]
ny.year <- ny.year +.25 # offset padding

我们还需要更改主题以在右边距留出一些空间
mytheme <- theme_grey() +
theme(
panel.background = element_rect(fill="white"),
legend.position="none",
axis.title.x = element_blank(),
axis.title.y = element_blank(),
plot.margin = unit(c(1,5,1,1), "lines")
)

现在不使用 geom_text,而是使用自定义注释。此外,我们削减了 2000-2014 年的限制,并告诉 ggplot 不要扩展它们。
p <- ggplot(urates, aes(x=year, y=urate)) +
geom_line(data=subset(urates,state!="New York"), aes(group=state), color="grey") +
geom_line(data=subset(urates,state=="New York"), color="maroon") +
mytheme +
scale_x_continuous(expand=c(0,0), limits=c(2000,2014),
breaks=seq(2000,2014,2), minor_breaks=seq(2001,2013,2))+
annotation_custom(
grob = textGrob(label = "New York", hjust = 0, gp=gpar(col="grey20", fontsize=3)),
ymin = ny.val, ymax = ny.val,
xmin = ny.year, xmax = ny.year)

现在注释将被剪裁,除非我们禁用面板剪裁。 Se我们禁用它
library(grid)
gt <- ggplot_gtable(ggplot_build(p))
gt$layout$clip[gt$layout$name == "panel"] <- "off"
grid.draw(gt)

这最终给了我们这个情节。

add desc outside plot

基本上,这种策略实际上只是在情节之外绘制事物,而不是真正剪裁网格线,但我相信这是一种实现类似结果的不同方式。

关于r - ggplot : Abbreviating horizontal grid lines after extending x-scale limits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23975072/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com