说我测量了10个人格特质,我知道人口基线。我想为个别考生创建一个图表,向他们展示他们对每个特征的个人百分位数排名。因此,数字从1(百分位数)变为99(百分位数)。鉴于50是完全平均的,我希望图表显示从50开始向左或向右的条形作为原点线。在ggplot的条形图中,似乎原点线默认为0.有没有办法将原点线更改为50?
这里有一些假数据和默认图表:
df <- data.frame(
names = LETTERS[1:10],
factor = round(rnorm(10, mean = 50, sd = 20), 1)
)
library(ggplot2)
ggplot(data = df, aes(x=names, y=factor)) +
geom_bar(stat="identity") +
coord_flip()
答案 0 :(得分:2)
接受@nongkrong的评论,这里有一些代码会做我认为你想要的,同时重新标记刻度以匹配原始范围并重新标记轴以避免显示数学:
library(ggplot2)
ggplot(data = df, aes(x=names, y=factor - 50)) +
geom_bar(stat="identity") +
scale_y_continuous(breaks=seq(-50,50,10), labels=seq(0,100,10)) + ylab("Percentile") +
coord_flip()
答案 1 :(得分:1)
这篇文章对我很有帮助 - 谢谢@ulfelder和@nongkrong。但是,我想在不同数据上重复使用代码,而无需手动调整刻度标签以适应新数据。为了保留ggplot的刻度位置,我定义了一个小函数并在label参数中调用了这个函数:
fix.labels <- function(x){
x + 50
}
ggplot(data = df, aes(x=names, y=factor - 50)) +
geom_bar(stat="identity") +
scale_y_continuous(labels = fix.labels) + ylab("Percentile") +
coord_flip()