Как встроить качественный пайнел-график в pdf и сохранить его в большом размере в отдельном файле? - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь построить панель (мультплоты) в выводе pdf в bookdown и сохранить хорошую версию в отдельном файле pdf. Если я использую текст элемента большого размера, чтобы сохранить хорошую версию файла PDF, встроенный сюжет был очень плохим.

как мне нарисовать один размер в латексном файле и сохранить в другом в pdf-файле?

Мне нужно встроить сюжет в докторскую диссертацию тезис и сохранить хорошее качество изображения для представления журнала.

изображение в pdf латексе

pdf файл очень ненужный большой: https://drive.google.com/open?id=1le_4olQwV_3CPiSpEZ2Noe8WyY5zM8tB

это набор тем с base_size


ggplot2::theme_set(theme_pubclean(base_size = 6) + theme(
    axis.text.x = element_text(size = 15),
    axis.text.y = element_text(size = 15),
    plot.title = element_text(size = 15),
    legend.text = element_text(size = 15),
    legend.title = element_text(size = 15),
    axis.title.x = element_blank(),
    axis.title.y = element_text(size = 15),
    plot.caption = element_text(size = 15),
    panel.border = element_blank(),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    axis.line.y = element_line(colour = "black"),
    axis.line.x = element_blank(),
    legend.position = "none"
  )
)

и код чанка для построения


 all <- ggdraw() +
  draw_plot(col_1, x = 0, y = 0.05, width = 0.381, height = 0.9)+
  draw_plot(p2, x = 0.38, y = 0.5, width = 0.618, height = 0.45)+
  draw_plot(p1, x = 0.38, y = 0.05, width = 0.618, height = 0.45)+
  draw_plot(legends_1, x = 0.25, y = 0.2, width = 0.1, height = 0.12)+
 draw_plot(legends_2, x = 0.25, y = 0.07, width = 0.12, height = 0.12)+
  draw_plot_label(label = c("a", "b", "c", "d","e", "f", "g"), size = 16, x = c(0, 0, 0, 0.19, 0.19, 0.39, 0.39), y = c(0.98, 0.66, 0.38,0.98, 0.66, 0.98, 0.5 ))

all


save_plot("_book/tese_files/Fig_3.pdf", all, ncol = 5, nrow = 4, base_aspect_ratio = 1.618)

В этом примере все работает нормально, в встроенном графике и PDF-файле, но в нем меньше графиков:

library("ggplot2")
library("cowplot")

g1 = c(rnorm(200, mean=350, sd=100), rnorm(200, mean=700, sd=100))
g2 = c(rnorm(200, mean=350, sd=100), rnorm(200, mean=500, sd=100))
group = as.factor(rep(c(1,2), each=200))
df_exp = data.frame(G1=log2(g1 + 1) , G2=log2(g2 + 1), GROUP=group)

gg_scatter = ggplot(df_exp, aes(G1, G2, color=GROUP, shape=GROUP)) + geom_point(alpha=.8)

gg_dist_g1 = ggplot(df_exp, aes(G1, fill=group)) + geom_density(alpha=.5) 
gg_dist_g1 = gg_dist_g1 + ylab("G1 density")

gg_dist_g2 = ggplot(df_exp, aes(G2, fill=group)) + geom_density(alpha=.5) 
gg_dist_g2 = gg_dist_g2 + ylab("G2 density")


# Avoid displaying duplicated legend
gg_dist_g1 = gg_dist_g1 + theme(legend.position="none")
gg_dist_g2 = gg_dist_g2 + theme(legend.position="none")

# Homogenize scale of shared axes
min_exp = min(df_exp$G1, df_exp$G2) - 0.01
max_exp = max(df_exp$G1, df_exp$G2) + 0.01
gg_scatter = gg_scatter + ylim(min_exp, max_exp)
gg_scatter = gg_scatter + xlim(min_exp, max_exp)
gg_dist_g1 = gg_dist_g1 + xlim(min_exp, max_exp)
gg_dist_g2 = gg_dist_g2 + xlim(min_exp, max_exp)
gg_dist_g1 = gg_dist_g1 + ylim(0, 2)
gg_dist_g2 = gg_dist_g2 + ylim(0, 2)

first_row = plot_grid(gg_scatter, labels = c('A'))
second_row = plot_grid(gg_dist_g1, gg_dist_g2, labels = c('B', 'C'), nrow = 1)
gg_all = plot_grid(first_row, second_row, labels=c('', ''), ncol=1)

# Display the legend
gg_scatter = gg_scatter + theme(legend.justification=c(0, 1), legend.position=c(0, 1))

gg_all
# With ncol=nrow=1, we specify that the figure (gg_all) is in one block with a base_height=8
# In this case A need to be resized to fit with the width of B + C (calculated relative to height)
save_plot("_book/tese_files/all_v2.pdf", gg_all, base_height=8, ncol=1, nrow=1) #Figure 2

# Here, the figure has 2 blocks separated by rows and each row have a base_heigth=4
# In this case B and C need to be resized to fit the width of A
save_plot("_book/tese_files/all_v3.pdf", gg_all, base_height=4, ncol=1, nrow=2) #Figure 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...