使用ggplot

时间:2017-09-19 09:39:23

标签: r plot ggplot2

我对R / ggplot2相当新,并且仍然在学习。希望我不会错过任何明显的东西!

我正在尝试使用ggplot2创建几个不同的图,我使用cowplot包中的函数plot_grid进行布局,以使图可以并排显示并添加图表编号和标题。问题是,如果生成的图表显示在一个小窗口中,或者我有许多彼此相邻的图表,那么这两个图表的标题有时会重叠。为了解决这个问题,我尝试使用another thread中找到的代码在我太长的标题中自动插入换行符,因为我希望标题的文本大小保持不变。

使用下面的代码,我可以轻松地自动插入必要的换行符,使我的标题具有特定的宽度,但问题是我总是需要输入宽度的数值。根据我插入的图的数量,这个值当然会改变。我当然可以通过我的代码并手动设置每组图的宽度,直到它是正确的值,但我希望自动化这个过程,以便自动调整标题宽度以匹配x轴的宽度。无论如何在R?

中实现这一点
    #automatically line break and add titles 
    myplot_theme1 = function (plot, x.title = NULL, y.title = NULL, plot.title = NULL) {
        plot +   
        labs(title = paste(strwrap(plot.title, width = 50), collapse = "\n"),
           x = x.title, 
           y = y.title)
    }


    # generate an example plot
    data_plot <- data.frame(x = rnorm(1000), y = rnorm (1000))
    plot1 <- ggplot(data_plot, aes(x = x, y = y)) + geom_point() 
    title <- "This is a title that is very long and does not display nicely"
    myplot_theme1(plot1, plot.title = title)

My test plot

我尝试过搜索,但我找不到任何解决方案似乎可以解决我想要的问题。 only solution我发现看起来很有前途的是基于包gridDebug。我的操作系统似乎不再支持这个软件包(macOS Sierra版本10.12.6),因为当我尝试安装它时,我收到以下错误消息:

  

install.packages中的警告:依赖项'graph','Rgraphviz'不可用

CRAN package documentation上,它声明该软件包甚至不适用于我以前的操作系统macOS El Capitan。如果有人知道是什么导致了这个问题,那么我可以尝试上面的线程中的解决方案当然也会很棒。

1 个答案:

答案 0 :(得分:0)

一个想法(但可能不是理想的解决方案)是根据标题中的字符数调整文本大小。您可以使用ggplot调整theme属性,在这种情况下,您需要调整plot.title(主题属性,而不是您的变量)。 plot.title包含元素size和横向对齐hjust,后者在[0,1]范围内。

# generate an example plot
data_plot <- data.frame(x = rnorm(1000), y = rnorm (1000))
plot1 <- ggplot(data_plot, aes(x = x, y = y)) + geom_point() 
title1 <- "This is a title that is very long and does not display nicely"
title2 <- "I'm an even longer sentence just test me out and see if I display the way you want or you'll be sorry"

myplot_theme1 = function (plot, x.title = NULL, y.title = NULL, plot.title = NULL) {
        plot +   
        labs(title = plot.title,
           x = x.title, 
           y = y.title) +
        theme(plot.title = element_text(size=800/nchar(plot.title), hjust=0.5))  # 800 is arbitrarily chosen
    }

myplot_theme1(plot1, plot.title = title1)
myplot_theme1(plot1, plot.title = title2)