我正在用
geom_line
绘制 ggplot。 x轴是YEAR
,y轴是连续变量N
。我怎样才能在 x 轴上绘制所有年份?
在美学上应用 factor(YEAR)
似乎不起作用,因为我在 linetype = STATUS
上按类型拆分
通常的 scale_x_continuous("year", labels = as.character(year), breaks = year)
也会返回错误
df样本(实际df有20年)
YEAR N STATUS
<int> <int> <chr>
1 2019 3704204 P
2 2020 2590358 P
3 2021 2240046 P
4 2019 5095171 I
5 2020 5783109 I
6 2021 3389832 I
有效的情节(隐藏了几年)
ggplot(df1, aes(YEAR, N+
geom_line(aes(linetype = STATUS))
申请
factor(YEAR)
没用
ggplot(df, aes(factor(YEAR), N)) +
geom_line(aes(linetype = STATUS))
它返回错误
Do you need to adjust the group aesthetic?
,但添加group = 1
搞乱了情节
缩放 x 轴也不起作用
ggplot(df, aes(factor(YEAR), N)) +
geom_line(aes(linetype = STATUS)) +
scale_x_continuous("YEAR", labels = as.character(YEAR), breaks = YEAR)
返回
Error in check_breaks_labels(breaks, labels) : object 'YEAR' not found
(也试过变体和scales_x_discrete
,同样的错误)
两个有用的工具:
scale_x_continuous()
与其他 scale_*()
函数一样,允许您指定很多关于轴的结构和呈现方式的信息,包括 breaks
,它确定刻度线的位置。如果你读过?scale_x_continuous
,有很多方法可以指定breaks
——你可以传递一个固定中断的向量,或者一个函数来计算它们,或者让它们为你计算。文档提到 scales::extended_breaks()
,这是一个有用的提示:{scales} 包包含许多用于指定此类事物的有用实用程序。scales::breaks_width()
是一种指定“我想要它们之间宽度 {whatever} 的中断”的方法。在这种情况下,如果你想要每年,通过width = 1
:library(ggplot2)
df1 <- data.frame(
YEAR = c(2019L, 2020L, 2021L, 2019L, 2020L, 2021L),
N = c(3704204L, 2590358L, 2240046L, 5095171L, 5783109L, 3389832L),
STATUS = c("P", "P", "P", "I", "I", "I")
)
ggplot(df1, aes(YEAR, N, linetype = STATUS)) +
geom_line() +
scale_x_continuous(breaks = scales::breaks_width(1))