导出为PDF会更改r轴比例

导出为PDF会更改r轴比例,r,pdf,export,R,Pdf,Export,以下示例与我的数据类似: library(ggplot2) library(gridExtra) set.seed(123) a=sample(1:100, 100) b=sample(1:50, 100, replace = TRUE) obj= data.frame(a,b) ggplot(obj, aes(a, b, col=a))+ geom_point()+ geom_path()+ coor

以下示例与我的数据类似:

library(ggplot2)
library(gridExtra)

set.seed(123)
a=sample(1:100, 100)
b=sample(1:50, 100, replace = TRUE)
obj= data.frame(a,b)

ggplot(obj, aes(a, b, col=a))+
               geom_point()+
               geom_path()+
               coord_cartesian(xlim =c(0, 100), ylim = c(0, 50))
数字在这里按比例缩放,X轴的长度是y轴在R中可见长度的两倍。但是,只要我使用grid.arrange对其进行排列并将其转换为PDF,绘图就会变为平方:

plot1=ggplot(obj, aes(a, b, col=a))+
               geom_point()+
               geom_path()+
               coord_cartesian(xlim =c(0, 100), ylim = c(0, 50))

plot2= ggplot(as.data.frame(c(1,2),c("1","2")), aes(1,1))+
               geom_point()

plot3= ggplot(obj,aes(a))+
               geom_histogram()

grid.arrange(plot1, plot2, plot1, plot3, nrow=2)

我把我的PDF做成了横向形状,以适合图表,但它们保持正方形。 添加“宽度”似乎只是缩放4个图形的位置,而不是轴。 我玩过cowplot,但这一个与PDF不兼容。我在许多数据文件上运行一个循环,在一个PDF文件中收集图形。 有人有其他建议吗? 先谢谢你


还有一个额外的问题。。。如何切换图例以使深色25位于顶部?

如果希望保持x和y长度之间的相同比例,可能可以将参数aspect.ratio添加到第一个绘图的主题中。在这里,我使用aspect.ratio=0.5使x轴比y轴长两倍,但您可以使用它来获得绘图的适当大小

要更改图例顺序,可以使用参数guide_colorbar和guide_legend in guides函数

总之,您可以执行以下操作:

plot1=ggplotobj,aesa,b,col=a+ 几何点+ 几何路径+ coord_cartesianxlim=c0,100,ylim=c0,50+ 测量光谱比率=0.5+ guidescolor=guide\u colorbarreverse=TRUE, 尺寸=导轨_legendreverse=真 plot2=ggplotas.data.framec1,2,c1,2,aes1,1+ 几何点 plot3=ggplotobj,aesa+ 几何直方图 grid.arrangeplot1,plot2,plot1,plot3,nrow=2
它看起来像你想要达到的吗?

如果你想保持x和y长度之间的相同比例,也许你可以在第一个情节的主题中添加参数aspect.ratio。在这里,我使用aspect.ratio=0.5使x轴比y轴长两倍,但您可以使用它来获得绘图的适当大小

要更改图例顺序,可以使用参数guide_colorbar和guide_legend in guides函数

总之,您可以执行以下操作:

plot1=ggplotobj,aesa,b,col=a+ 几何点+ 几何路径+ coord_cartesianxlim=c0,100,ylim=c0,50+ 测量光谱比率=0.5+ guidescolor=guide\u colorbarreverse=TRUE, 尺寸=导轨_legendreverse=真 plot2=ggplotas.data.framec1,2,c1,2,aes1,1+ 几何点 plot3=ggplotobj,aesa+ 几何直方图 grid.arrangeplot1,plot2,plot1,plot3,nrow=2
它看起来像你想要达到的吗?

你只需要左列中的两个数字的尺寸为1:2,而右列中的两个数字必须是正方形吗?如果是这样,您可以尝试组合使用heights和widths参数来排列grob或grid.extra,同时在ggsave中指定整个图像的宽度和高度。我发现使用arrangeGrob和ggsave的组合可以最稳定地保持维度的可预测性

你可以试试:

library(ggplot2)
library(gridExtra)

set.seed(123)
a=sample(1:100, 100)
b=sample(1:50, 100, replace = TRUE)
obj= data.frame(a,b)

plot1=ggplot(obj, aes(a, b, col=a))+
  geom_point()+
  geom_path()+
  coord_cartesian(xlim =c(0, 100), ylim = c(0, 50))  #+
  #theme(legend.position = "none")

plot2= ggplot(as.data.frame(c(1,2),c("1","2")), aes(1,1))+
  geom_point()

plot3= ggplot(obj,aes(a))+
  geom_histogram()

bigplot <- arrangeGrob(plot1, plot2, plot1, plot3, 
                       nrow=2, 
                       heights = c(2, 2),
                       widths = c(4, 2))

ggsave("bigplot.pdf", 
       bigplot,
       width = 11,
       height = 8.5,
       units = "in")

您是否只需要左列中的两个数字的尺寸为1:2,右两个数字的尺寸为正方形?如果是这样,您可以尝试组合使用heights和widths参数来排列grob或grid.extra,同时在ggsave中指定整个图像的宽度和高度。我发现使用arrangeGrob和ggsave的组合可以最稳定地保持维度的可预测性

你可以试试:

library(ggplot2)
library(gridExtra)

set.seed(123)
a=sample(1:100, 100)
b=sample(1:50, 100, replace = TRUE)
obj= data.frame(a,b)

plot1=ggplot(obj, aes(a, b, col=a))+
  geom_point()+
  geom_path()+
  coord_cartesian(xlim =c(0, 100), ylim = c(0, 50))  #+
  #theme(legend.position = "none")

plot2= ggplot(as.data.frame(c(1,2),c("1","2")), aes(1,1))+
  geom_point()

plot3= ggplot(obj,aes(a))+
  geom_histogram()

bigplot <- arrangeGrob(plot1, plot2, plot1, plot3, 
                       nrow=2, 
                       heights = c(2, 2),
                       widths = c(4, 2))

ggsave("bigplot.pdf", 
       bigplot,
       width = 11,
       height = 8.5,
       units = "in")

就这样!非常感谢。很高兴能帮忙;现在你已经打开了这个绘图。。。您知道如何更改图例的标签,即25位于顶部??25位于顶部,颜色较浅或较深?颜色较深,就像现在一样。所以,只需将传奇人物的一面朝上向下切换……就是这样!非常感谢。很高兴能帮忙;现在你已经打开了这个绘图。。。您知道如何更改图例的标签,即25位于顶部??25位于顶部,颜色较浅或较深?颜色较深,就像现在一样。所以,只需切换图例的上下方向…也感谢您的编辑建议,我确实忘记了图书馆!。现在,aspect.ratio为我做了这件事,但是如果我想添加更多的图形,您的添加将非常有用!也谢谢你的编辑建议,我真的忘了图书馆了!。现在,aspect.ratio为我做了这件事,但是如果我想添加更多的图形,您的添加将非常有用!