如何在ggplot条形图中更改原点行位置?

时间:2015-09-02 21:22:12

标签: r ggplot2

说我测量了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()

2 个答案:

答案 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()