A website for self learning, collecting and sharing.
export is an R package to easily export active R graphs and statistical output in publication quality to Microsoft Office, HTML, and Latex. More information on GitHub.
install.packages("officer")
install.packages("rvg")
install.packages("openxlsx")
install.packages("ggplot2")
install.packages("flextable")
install.packages("xtable")
install.packages("rgl")
install.packages("stargazer")
install.packages("tikzDevice")
install.packages("xml2")
install.packages("broom")
install.packages("devtools")
devtools::install_github("tomwenseleers/export")
library(export)
?graph2ppt
?graph2doc
?graph2svg
?graph2png
?table2ppt
?table2tex
?table2excel
?table2doc
?table2html
## export of ggplot2 plot
library(ggplot2)
qplot(Sepal.Length, Petal.Length, data = iris, color = Species, size = Petal.Width, alpha = I(0.7))
# export to Powerpoint
graph2ppt()
graph2ppt(file="ggplot2_plot.pptx", aspectr=1.7)
# add 2nd slide with same graph 9 inches wide and A4 aspect ratio
graph2ppt(file="ggplot2_plot.pptx", width=9, aspectr=sqrt(2), append=TRUE)
# add 3rd slide with same graph with fixed width & height
graph2ppt(file="ggplot2_plot.pptx", width=6, height=5, append=TRUE)
# export to Word
graph2doc()
# export to bitmap or vector formats
graph2svg()
graph2png()
graph2tif()
graph2jpg()
## export of aov Anova output
fit=aov(yield ~ block + N * P + K, npk)
x=summary(fit)
# export to Powerpoint
table2ppt(x=x)
table2ppt(x=x,file="table_aov.pptx")
table2ppt(x=x,file="table_aov.pptx",digits=4,append=TRUE)
table2ppt(x=x,file="table_aov.pptx",digits=4,digitspvals=1,font="Times New Roman",pointsize=16,append=TRUE)
# export to Word
table2doc(x=x)
# export to Excel
table2excel(x=x, file = "table_aov.xlsx",digits=4,digitspvals=1,sheetName = "Anova_table", add.rownames = TRUE)
# export to Latex
table2tex(x=x)
# export to HTML
table2html(x=x)
by liuyujie0136
## Export plots to PPT
# library package "export"
library(export)
# get system time for suitable file name
t=as.character(Sys.time())
t=gsub(" ","-",t)
t=gsub(":","-",t)
fname=paste0("Rplot-",t,".pptx")
# export plots
graph2ppt(file=fname)
使用aes_string
library(ggplot2)
data <- data.frame(x = c(1, 2, 3),
y1 = c(1, 3, 4),
y2 = c(2, 5, 7),
y3 = c(5, 2, 9))
for (y in c("y1", "y2", "y3")) {
p <- ggplot(data = data, aes_string(x = "x", y = y)) +
geom_point()
print(p)
}
coord_cartesian
instead of scale_y_continuous
Example:
ggplot(df, aes(x = Group, y = Count)) +
geom_boxplot(outlier.colour = NA) +
coord_cartesian(ylim = c(0, 100))
From the coord_cartesian
documentation:
Setting limits on the coordinate system will zoom the plot (like you’re looking at it with a magnifying glass), and will not change the underlying data like setting limits on a scale (e.g. scale_y_continuous) will.
You can also use scale_y_continuous
alongside coord_cartesian
to modify breaks
, minor_breaks
and expand
etc. Just don’t supply it with the ylim
argument!
借用ggpubr
包
library(ggplot2)
library(ggpubr)
set.seed(1234)
df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
p1 <- ggplot(data = df,
mapping = aes(x = x,
y = y)) +
geom_point() +
geom_smooth(method = "lm") +
theme_classic() +
labs(x = "X",
y = "Y") +
theme(axis.title = element_text(size = 10)) +
stat_cor(label.y = 300,
aes(label = paste(..rr.label.., ..p.label.., sep = "~`,`~"))) +
stat_regline_equation(label.x = 5, label.y = 280)
ggsave("p1.pdf",
annotate_figure(p1, fig.lab = "(a)", fig.lab.size = 20),
height = 4,
width = 4)
https://zhuanlan.zhihu.com/p/161401082
使用cowplot::plot_grid(align = "vh")
,(align = "v"
:垂直方向上对齐,align = "h"
:水平方向上对齐)
例:plot_grid(p1, p2, p3, p4, ncol = 2, align = "vh")
另,可用于 ggplot2 子图排版的 package 有:
https://wilkelab.org/cowplot/articles/shared_legends.html
使用cowplot::get_legend()
和cowplot::plot_grid()
,示例如下:
library(ggplot2)
library(cowplot)
# plot something first ......
# arrange the three plots in a single row
prow <- plot_grid(
p1 + theme(legend.position="none"),
p2 + theme(legend.position="none"),
p3 + theme(legend.position="none"),
align = "vh",
labels = c("A", "B", "C"),
nrow = 1
)
# extract the legend from one of the plots
legend_a <- get_legend(
# create some space to the left of the legend
p1 + theme(legend.box.margin = margin(0, 0, 0, 12))
)
# add the legend to the row we made earlier. Give it one-third of the width of one plot (via rel_widths).
plot_grid(prow,
legend_a,
rel_widths = c(3, .4))
# extract a legend that is laid out horizontally
legend_b <- get_legend(
p1 +
guides(color = guide_legend(nrow = 1)) +
theme(legend.position = "bottom")
)
# add the legend underneath the row we made earlier. Give it 10% of the height of one plot (via rel_heights).
plot_grid(prow,
legend_b,
ncol = 1,
rel_heights = c(1, .1))