gpt4 book ai didi

r - 有没有一种方法可以操作ggplot刻度和标签?

转载 作者:行者123 更新时间:2023-12-03 09:11:46 25 4
gpt4 key购买 nike

ggplot通常可以很好地创建有意义的刻度和标签。

但是,我发现在具有很多方面并且可能带有formatter=语句的情节中,标签趋于变得过于“密集”和叠印,例如在此图片中:

df <- data.frame(
fac=rep(LETTERS[1:10], 100),
x=rnorm(1000)
)

ggplot(df, aes(x=x)) +
geom_bar(binwidth=0.5) +
facet_grid(~fac) +
scale_x_continuous(formatter="percent")

我知道我可以通过向 breaks=提供 scale=scale_x_continuous参数来明确指定刻度的间隔和标签。

但是,我正在处理带有许多问题和十几个交叉中断的调查数据,因此需要找到一种自动执行此操作的方法。

有没有一种方法告诉 ggplot自动计算中断和标签,但是只有很少的量(例如,最小,最大和零点)?

编辑:理想情况下,我不想指定最小和最大点,但是以某种方式利用内置的ggplot刻度训练,并使用默认的计算刻度极限。

最佳答案

您可以在调用ggplot时传入诸如min()max()之类的参数,以动态指定中断。听起来您将要在各种各样的数据上应用此方法,因此您可能需要考虑将其通用化为一个函数并弄乱格式,但是这种方法应该可行:

ggplot(df, aes(x=x)) + 
geom_bar(binwidth=0.5) +
facet_grid(~fac) +
scale_x_continuous(breaks = c(min(df$x), 0, max(df$x))
, labels = c(paste( 100 * round(min(df$x),2), "%", sep = ""), paste(0, "%", sep = ""), paste( 100 * round(max(df$x),2), "%", sep = ""))
)

或使用 opts(axis.text.x = theme_text(angle = 90, hjust = 0))旋转x轴文本以产生如下内容:

更新

在最新版本的 ggplot2 中, breakslabelsscale_x_continuous参数接受函数,因此可以执行以下操作:
myBreaks <- function(x){
breaks <- c(min(x),median(x),max(x))
names(breaks) <- attr(breaks,"labels")
breaks
}

ggplot(df, aes(x=x)) +
geom_bar(binwidth=0.5) +
facet_grid(~fac) +
scale_x_continuous(breaks = myBreaks,labels = percent_format()) +
opts(axis.text.x = theme_text(angle = 90, hjust = 1,size = 5))

关于r - 有没有一种方法可以操作ggplot刻度和标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5380417/

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