My data like this,but draw plot x axis is 12_01 12_10 12_11 12_12 12_2 I want to like 12_01 12_02 12_03...... 12_12 How can do it? thanks!
df=data.frame(year=12,
month=1:12,
g=c(10,20,14,15,11:18))
df2 <- df %>%
arrange(month) %>%
unite(year_month,year,month) %>%
group_by(year_month)
ggplot(df2 , aes(x = year_month, y =g,group = 1))
geom_line()
geom_point(shape = 22, size = 2, fill = "white")
CodePudding user response:
You could manage this by converting year_month into a factor; or alternatively using {lubridate}...
library(dplyr)
library(tidyr)
library(ggplot2)
library(stringr)
df=data.frame(year=12,
month=1:12,
g=c(10,20,14,15,11:18))
df2 <- df %>%
arrange(month) %>%
unite(year_month,year,month) %>%
mutate(year_month = factor(year_month, levels = paste0("12_", 1:12))) %>%
group_by(year_month)
ggplot(df2 , aes(x = year_month, y =g,group = 1))
geom_line()
geom_point(shape = 22, size = 2, fill = "white")
Alternatively with lubridate if you want to preserve the variable as a date object:
df2 <- df %>%
arrange(month) %>%
unite(year_month,year,month) %>%
mutate(year_month = ym(year_month)) %>%
group_by(year_month)
ggplot(df2 , aes(x = year_month, y =g,group = 1))
geom_line()
geom_point(shape = 22, size = 2, fill = "white")
scale_x_date(date_labels = "%y_%m",
date_breaks = "1 month")
CodePudding user response:
My recommdation is to create a date variable in you dataframe and use that in the x axis, that way is more flexible de axis label configuration, via scale_x_date()
.
Look at two options:
library(dplyr)
library(ggplot2)
library(lubridate)
df <- data.frame(year = 12, month = 1:12, g = c(10, 20, 14, 15 , 11:18))
df2 <- df %>%
mutate(
date = make_date(year 2000, month, "01")
)
ggplot(df2, aes(x = date, y = g))
geom_line()
geom_point(shape = 22, size = 2, fill = "white")
scale_x_date(labels = ~format(., '%m_%y'))
ggplot(df2, aes(x = date, y = g))
geom_line()
geom_point(shape = 22, size = 2, fill = "white")
scale_x_date(labels = ~format(., '%b %y'))
Created on 2022-03-18 by the reprex package (v2.0.1)