R:cairo_pdf输出大小和绘图大小

时间:2013-12-01 09:41:00

标签: r pdf plot cairo

ggplot中沿着y轴放置长文本而在cairo_pdfwidth调用height时,它会使用width = 7, height = 7个参数,这样宽图不能适合输出PDF。

是否可以让cairo_pdf决定PDF的大小以供读者查看制作的PDF中的整个情节?

Here可以通过ggsave找到解决方案,但不适合这种情况,因为ggsave在PDF输出中存在非拉丁字符问题。

代码示例:

cairo_pdf:表现良好的PDF。该图不适合PDF。

cairo_pdf("out_cairo.pdf")
df <- data.frame(x = c("Несмотря на то, что доктора лечили его, пускали кровь и давали пить лекарства, он всё-таки выздоровел.", "B"), y = c(15, 20))
ggplot(df, aes(x = x, y = y)) +
  stat_summary(fun.y = "mean", geom = "bar") +
  coord_flip()
dev.off()

pdf:文字重叠。

pdf("out_pdf.pdf")
df <- data.frame(x = c("Несмотря на то, что доктора лечили его, пускали кровь и давали пить лекарства, он всё-таки выздоровел.", "B"), y = c(15, 20))
ggplot(df, aes(x = x, y = y)) +
  stat_summary(fun.y = "mean", geom = "bar") +
  coord_flip()
dev.off()

1 个答案:

答案 0 :(得分:1)

这为病态的宽边和情节留出了空间。如果您认为这是程序化的,您可以编写一个接受数据帧的mycairo函数,并使用strwidth来查找打印x值的最大长度。

df <- data.frame(x = c("Несмотря на то, что доктора лечили его, пускали кровь и давали пить лекарства, он всё-таки выздоровел.", "B"), y = c(15, 20))
ylablen <- strwidth(df$x[1])
cairo_pdf("out_cairo.pdf", width= ylablen+5)

ggplot(df, aes(x = x, y = y)) +
  stat_summary(fun.y = "mean", geom = "bar") +
  coord_flip()
dev.off()