Sample data:
### Data
df <- data.frame(year = seq(as.Date("1998/1/1"), as.Date("2012/1/1"), "years"),
ton = sample(200:500, 15, replace = TRUE),
trend = sample(50:100, 15, replace = TRUE),
count = sample(100:200, 15, replace = TRUE))
### Load the needed libraries
library(ggplot2)
library(scales)
library(grid)
library(gridExtra)
### Make a plot
plot1 <- ggplot(data = df, aes(x = year, y = ton)) + geom_bar(stat = "identity") +
scale_x_date(breaks = df$year, labels = date_format("%Y")) +
theme_bw()
plot2 <- ggplot(data = df, aes(x = year, y = trend)) + geom_line() +
geom_point(shape = 21, size = 4, fill = "white") +
scale_x_date(breaks = df$year, labels = date_format("%Y")) +
theme_bw()
I combined both plots using the grid.arrange
, and here is the syntax:
grid.arrange(plot1, plot2, nrow = 2, top = "Sample data trend")
I tried the following code to make a table (the year
and count
variables, but the result is not good.
### Create new dataframe for the table
df1 <- data.frame(count = df$count,
row.names = df$year)
df1 <- as.data.frame(t(df1))
### Add table below the graph
tt <- ttheme_default(colhead=list(fg_params = list(parse=TRUE)))
tbl <- tableGrob(df1, rows=NULL, theme=tt)
grid.arrange(plot1, plot2, tbl,
nrow = 3,
as.table = TRUE)
The result of the above syntax:
Question: How can I make it fit in the graph area, and how to make the table closer to the line plot graph so that the white space will be minimized? And if there's any way to customize it?
Thank you.
This R package uses ggplot2 syntax to create great tables. for plotting. The grammar of graphics allows us to add elements to plots. Tables seem to be forgotten in terms of an intuitive grammar with tidy data philosophy – Until now.
the %>% is a pipe operator that is actually part of the dplyr library (along with the filter function) not from the ggplot2 library. To sample 1%, there is a sample_frac function in the dplyr library. It would be something like (df %>% sample_frac(0.01))
tt <- ttheme_default(colhead=list(fg_params = list(parse=TRUE)),
base_size = 10,
padding = unit(c(2, 4), "mm"))
tbl <- tableGrob(df1, rows=NULL, theme=tt)
png("E:/temp/test.png", width = 1000, height = 1000)
grid.arrange(plot1, plot2, tbl,
nrow = 3, heights = c(2, 2, 0.5))
dev.off()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With