我正在尝试使用ggplot2
来绘制这个:但正如您在x轴上看到的那样,您无法阅读任何内容......
那么我怎样才能在x轴上显示每10年的值,例如?
这是我的命令:
ggplot(prova, aes(x=year, y=mass..g.)) + geom_line(aes(group = 1))
答案 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")))