【问题标题】:Wrap Axis Labels in Correlation Matrix在相关矩阵中包装轴标签
【发布时间】:2016-11-03 16:35:55
【问题描述】:

我正在尝试使用ggcorr() function within library(GGally) 创建相关矩阵。该包按预期工作,但我遇到了一个问题,我想编辑轴标签在绘图上的显示方式。

目前,他们会自动添加 _ 或 .用空格或其他字符分隔名称。理想情况下,我想在名称中的空格之间创建一个换行符 (\n),以便可以轻松读取长名称和短名称,并且不会超出适当的列和行。

我找到了其他人在 SO 上使用的解决方案,包括使用 str_wrap(),但它是在 ggplot() 调用中,而不是这个特定的包。我检查了the R code for the package,但找不到专门编辑这些标签的位置。每当我尝试编辑 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

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

【问题讨论】:

  • 在函数中,看起来第 45 行是您可以控制名称的一个地方(可能使用 \n 而不是 gsub 中的下划线)并且您需要添加 check.names = FALSE到第 46 行。我最终在第 49 行需要 reshape2 而不是 reshape。使用这些更改创建一个新函数似乎可以提供您想要的输出。
  • @aosmith - 感谢您的建议。 gsub 推荐绝对是我看代码时错过的地方。但是,如果我错了,请纠正我,但看起来好像唯一的电话是reshape2。我看不到您从 reshape 更改为 reshape2 的位置。另外,我的行号必须与您的不同,所以我不明白您将check.names = FALSE放在哪里。
  • check.namesdata.frame 的一个参数,因此在将“m”转换为data.frame 时使用它。如果您看到的函数在“m”上使用 reshape2,则无需更改。

标签: r ggplot2 ggally


【解决方案1】:

几种方法

您可以编辑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() 进行更多控制。我现在遇到there are lines being drawn between the name breaks 的一个问题。你有同样的问题吗?
  • @medavis6 ;不,我没有看到这种效果。我的系统。 R3.3.2,GGally_1.0.1,ggplot2_2.1.0.9000,
  • 感谢您的检查。 FWIW,我正在使用 GGally_1.2.0 , ggplot2_2.1.0.9001 , R3.3.1。要删除这些行,我只是将您的 size = 0, #set this to zero 更改为 size = NA。再次感谢今天的所有帮助!
  • 标签可以向右移动吗?
  • @Adel ;不太确定你想把它移动到哪里,但你可以通过改变 nudge_x 和 hjust 的值来获得一些控制
猜你喜欢
  • 2020-01-11
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
相关资源
最近更新 更多