gpt4 book ai didi

R ggplot 和分面网格 : how to control x-axis breaks

转载 作者:行者123 更新时间:2023-12-03 22:33:53 25 4
gpt4 key购买 nike

我正在尝试使用 ggplot 绘制每个日历年的时间序列变化,但我在精细控制 x 轴时遇到了问题。如果我不使用 scale="free_x"然后我最终得到一个 x 轴,显示几年以及有问题的年份,如下所示:

Facet grid plot with common x-axis

如果我确实使用 scale="free_x"然后正如人们所期望的那样,我最终会为每个地块加上刻度标签,并且在某些情况下因地块而异,这是我不想要的:

Facet grid plot with free x-axis

我已经进行了各种尝试使用 scale_x_date 等来定义 x 轴,但没有任何成功。因此,我的问题是:

问:如何控制 ggplot 分面网格上的 x 轴中断和标签,以便(时间序列)x 轴对于每个分面都相同,仅显示在面板底部并以月份格式显示1, 2, 3 等还是“Jan”、“Feb”、“Mar”?

代码如下:

require(lubridate)
require(ggplot2)
require(plyr)

# generate data
df <- data.frame(date=seq(as.Date("2009/1/1"), by="day", length.out=1115),price=runif(1115, min=100, max=200))
# remove weekend days
df <- df[!(weekdays(as.Date(df$date)) %in% c('Saturday','Sunday')),]
# add some columns for later
df$year <- as.numeric(format(as.Date(df$date), format="%Y"))
df$month <- as.numeric(format(as.Date(df$date), format="%m"))
df$day <- as.numeric(format(as.Date(df$date), format="%d"))

# calculate change in price since the start of the calendar year
df <- ddply(df, .(year), transform, pctchg = ((price/price[1])-1))

p <- ggplot(df, aes(date, pctchg)) +
geom_line( aes(group = 1, colour = pctchg),size=0.75) +
facet_wrap( ~ year, ncol = 2,scale="free_x") +
scale_y_continuous(formatter = "percent") +
opts(legend.position = "none")

print(p)

最佳答案

这是一个例子:

df <- transform(df, doy = as.Date(paste(2000, month, day, sep="/")))

p <- ggplot(df, aes(doy, pctchg)) +
geom_line( aes(group = 1, colour = pctchg),size=0.75) +
facet_wrap( ~ year, ncol = 2) +
scale_x_date(format = "%b") +
scale_y_continuous(formatter = "percent") +
opts(legend.position = "none")
p

enter image description here

你想要这个吗?

诀窍是生成同一虚拟年的一年中的一天。

更新

这是开发版本的示例(即 ggplot2 0.9)
p <- ggplot(df, aes(doy, pctchg)) +
geom_line( aes(group = 1, colour = pctchg), size=0.75) +
facet_wrap( ~ year, ncol = 2) +
scale_x_date(label = date_format("%b"), breaks = seq(min(df$doy), max(df$doy), "month")) +
scale_y_continuous(label = percent_format()) +
opts(legend.position = "none")
p

enter image description here

关于R ggplot 和分面网格 : how to control x-axis breaks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8951422/

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