如何在ggplot轴上不显示所有标签?

时间:2015-07-30 19:37:48

标签: r ggplot2

我正在尝试使用ggplot2来绘制这个:enter image description here但正如您在x轴上看到的那样,您无法阅读任何内容......

那么我怎样才能在x轴上显示每10年的值,例如?

这是我的命令:

ggplot(prova, aes(x=year, y=mass..g.)) + geom_line(aes(group = 1))

4 个答案:

答案 0 :(得分:22)

您的year列是否为数字?您可以使用scale_x_continuous参数添加breaks以指定x轴标记的位置。我无法分辨图像中的年份范围,但如果从1900年到2000年(例如),您可以执行以下操作:

ggplot(prova, aes(x=year, y=mass..g.)) +
    geom_line(aes(group=1)) +
    scale_x_continuous(breaks=seq(1900, 2000, 10))

答案 1 :(得分:11)

虚假数据:

df = data.frame(year = as.factor(1800:2000),
                variable = rnorm(length(1800:2000)))

你的虚假数据:

ggplot(df, aes(x = year, y = variable, group = 1)) +
    geom_line()

问题是你的年变量是factor(或者可能是字符串?),所以它被解释为分类。您可以在此框架内工作:

ggplot(df, aes(x = year, y = variable, group = 1)) +
    geom_line() +
    scale_x_discrete(breaks = levels(df$year)[c(T, rep(F, 9))])

或者,更好的是,您可以将其转换为数字并自动运行:

df$real_year = as.numeric(as.character(df$year))
ggplot(df, aes(x = real_year, y = variable)) +
    geom_line()

请注意,这样做,正确的方式",你不必为group = 1打扰或者弄乱规模。 ggplot奖励您以适当的格式获取数据:修复您的数据,您不必修复您的情节。如果你想确保标签正好是每10年一次,你可以按照用户2034412的建议使用scale_x_continuous,但默认情况下它会很好地猜测"漂亮"在轴上断裂。

如果您的x轴是实际日期或日期时间,例如1984-10-31,则应将其转换为Date对象(如果有时间,则可以转换为POSIX对象好的),然后ggplot将再次知道如何妥善处理它。有关转换为适当日期类别的信息,请参阅?strftime(基本功能)或lubridate包。

答案 2 :(得分:5)

其他答案涵盖了您的日期是数字年份的情况,但如果(如@Gregor所说)您的日期是实际Date个对象,则更容易:

scale_x_date(name = 'My date axis title', date_breaks = '20 years',
        date_labels = '%Y')

使用scale_date,您可以使用直观的语言控制休息时间,并使用(希望)熟悉strptime notation标记。

答案 3 :(得分:2)

如果你没有太多数据点,你可以这样做:

虚假数据:

df = data.frame(year = as.factor(1990:2000),variable = 
rnorm(length(1990:2000)))

正常情节:

ggplot(df, aes(x = year, y = variable, group = 1)) + geom_line()

使用隐藏标签进行绘图:

ggplot(df, aes(x = year, y = variable, group = 1)) +
  geom_line() + theme(axis.text.x=element_text(color=c("black","transparent","transparent","transparent","black","transparent","transparent","transparent","transparent","transparent","black")))