在相关矩阵中换行坐标轴标签

5
我正在尝试使用 library(GGally)中的ggcorr()函数创建相关矩阵。该软件包正在按照预期工作,但我遇到了一个问题,我想编辑绘图上的轴标签的显示方式。
目前,它们会自动添加_或.以分隔名称中的空格或其他字符。理想情况下,我希望在名称之间的空格处创建换行符(\n),以便长名称和短名称可以轻松阅读,并且不会延伸到适当的列和行之外。
我找到了其他人在SO上使用的解决方案,包括使用str_wrap(),但它是在ggplot()调用中,而不是这个特定的软件包。我已经检查了该软件包的R代码,但无法找到特定编辑这些标签的位置。每当我尝试编辑X或Y轴文本时,它都会添加一个全新的轴和一组标签。
我目前使用dcast()将数据框转换为结果数据框,即使我在球员名称列中使用gsub()替换"\n",它们也会在dcast()转换中丢失。
这是我正在处理的示例。我希望能够自动在标签的名字和姓氏之间创建换行符。
library(GGally)
library(ggplot2)

test <- structure(list(Date = structure(c(17100, 17102, 17103, 17106, 
17107), class = "Date"), `Alexis Ajinca` = c(1.2, NA, 9.2, 6.4, 
NA), `Anthony Davis` = c(95.7, 76.9, 29, 67, 24.9), `Buddy Hield` = c(9.7, 
4.7, 17, 8, 28.3), `Cheick Diallo` = c(NA, NA, 3.2, NA, NA), 
    `Dante Cunningham` = c(0.5, 27.6, 14, 13.5, -1), `E'Twaun Moore` = c(19.2, 
    16.1, 22, 20.5, 10.1), `Lance Stephenson` = c(16.1, 31.6, 
    8, 8.1, 34.8), `Langston Galloway` = c(10.9, 2, 13.8, 2.2, 
    29.4), `Omer Asik` = c(4.7, 6.6, 9.9, 15.9, 14.2), `Solomon Hill` = c(4.7, 
    13.2, 12.8, 35.2, 4.4), `Terrence Jones` = c(17.1, 12.4, 
    9.8, NA, 20.8), `Tim Frazier` = c(40.5, 40.2, 18.3, 44.1, 
    7.2)), .Names = c("Date", "Alexis Ajinca", "Anthony Davis", 
"Buddy Hield", "Cheick Diallo", "Dante Cunningham", "E'Twaun Moore", 
"Lance Stephenson", "Langston Galloway", "Omer Asik", "Solomon Hill", 
"Terrence Jones", "Tim Frazier"), row.names = c(NA, -5L), class = "data.frame")

ggc <- ggcorr(test[,-1], method = c("pairwise","pearson"), 
       hjust = .85, size = 3,
       layout.exp=2)
ggc

enter image description here

感谢您的所有帮助,请让我知道如果您有任何问题或需要任何澄清!

1
在这个函数中,看起来第45行是你可以控制名称的一个位置(也许在gsub中使用\n代替下划线),并且你需要在第46行添加check.names = FALSE。我最终需要在第49行使用reshape2而不是reshape。使用这些更改创建一个新的函数似乎可以得到你想要的输出。 - aosmith
@aomsith - 感谢您的建议。gsub 的建议无疑是我在查看代码时遗漏的地方。然而,请纠正我如果我错了,但看起来唯一的调用是针对 reshape2 的。我没有看到您从 reshape 切换到 reshape2 的位置。此外,我的行号可能与您的不同,所以我不明白您在哪里放置了 check.names = FALSE - medavis6
1
check.names是传递给data.frame的参数,因此在将“m”转换为data.frame时请使用它。如果您看到的函数在“m”上使用了reshape2,则无需更改。 - aosmith
1个回答

3

几种方法

您可以编辑由 ggcorr 返回的对象

g = ggplot_build(ggc)
g$data[[2]]$label = gsub("_", "\n", g$data[[2]]$label )
grid::grid.draw(ggplot_gtable(g))

或者您可以创建一个新的数据框架,并使用geom_text手动添加标签。这样可能会更好地控制文本对齐和放置。

# I dont see how to suppress the labels so just set the size to zero
ggc <- ggcorr(test[,-1], method = c("pairwise","pearson"), 
       hjust = .85, 
       size = 0, # set this to zero
       layout.exp=2)

# Create labels and plot
dat <- data.frame(x = seq(test[-1]), y = seq(test[-1]), 
                  lbs = gsub(" ", "\n", names(test[-1]) ))
ggc + geom_text(data=dat, aes(x, y, label=lbs), nudge_x = 2, hjust=1)

很棒的答案。我特别喜欢第二个建议,它允许使用 geom_text() 更多的控制。但我遇到了一个问题,现在在名称之间画出了线条。你有同样的问题吗?链接 - medavis6
@medavis6;不,我在我的系统中没有看到这种效果。我的系统为R3.3.2,GGally_1.0.1,ggplot2_2.1.0.9000。 - user20650
感谢查看。对于参考,我正在使用GGally_1.2.0、ggplot2_2.1.0.9001和R3.3.1。为了删除这些线条,我只需将您的 size = 0, #set this to zero 更改为 size = NA。再次感谢您今天的所有帮助! - medavis6
能否将标签移到右边? - Adel
1
@ Adel; 不太确定您想将其移动到哪里,但是通过更改nudge_x和hjust的值,您可以获得一些控制。 - user20650

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接