R 在geom_文本中,将文本右对齐,但将每个框的中心对齐

R 在geom_文本中,将文本右对齐,但将每个框的中心对齐,r,ggplot2,geom-text,R,Ggplot2,Geom Text,我已经使用geom_tile和geom_text创建了一个带有ggplot的图形。我希望能够从一列中读出数字,并将它们全部排列起来。我将字体设置为Courier,并使用hjust来对齐数字(否则负号会使对齐偏离)。然而,我找不到一种方法来保持这个正确的理由,并在每个框中间的文本中心。关于如何让数字对齐以便快速扫描列有何想法 可复制的例子如下 require(reshape2) require(ggplot2) require(scales) set.seed(504) df_graph <

我已经使用geom_tile和geom_text创建了一个带有ggplot的图形。我希望能够从一列中读出数字,并将它们全部排列起来。我将字体设置为Courier,并使用hjust来对齐数字(否则负号会使对齐偏离)。然而,我找不到一种方法来保持这个正确的理由,并在每个框中间的文本中心。关于如何让数字对齐以便快速扫描列有何想法

可复制的例子如下

require(reshape2)
require(ggplot2)
require(scales)

set.seed(504)
df_graph <- data.frame("Category"=c("Green","Blue","Red","Yellow","Black","Random1","Random2","Random3","Random4","Random5","Random6","Random7",
                                    "Random8","Random9","Random10"),"Test1"=rnorm(15),"Test1"=rnorm(15),"Test2"=rnorm(15),"Test3"=rnorm(15),
                       "Test4"=rnorm(15),"Test5"=rnorm(15))

df_graph <- melt(df_graph)                       
df_graph$text <- round(df_graph$value, 2)

colors_used <- c("#B2182B","#D6604D","#F4A582","#FDDBC7","#F7F7F7","#D1E5F0","#92C5DE","#4393C3","#2166AC")
values <- seq(-4, 4, length = 9)

g <- ggplot(df_graph, aes(variable, Category))
g <- g + geom_tile(aes(fill = value), colour = "white", size=0.75)
g <- g + geom_text(aes(label=text),size=3, family="Courier", hjust = 1)
g <- g + scale_fill_gradientn(colours = colors_used, na.value = "#FFFFFF", values = values,rescaler = function(x, ...) x, oob = identity)
g <- g + theme_bw()
g <- g + theme(
  axis.text.x= element_text(color="black", size=10, angle = 45, hjust = 0.5),
  axis.text.y= element_text(color="black", size=8),
  axis.title.y = element_text(color="black",size=10),
  plot.title = element_text(color="black",size=14,face="bold"),
  legend.key = element_rect(fill="white"), legend.background = element_rect(fill=NA),
  legend.position="none",
  legend.title = element_blank(),
  panel.grid  = element_blank(),
  panel.border = element_blank()
)
require(重塑2)
需要(ggplot2)
需要(天平)
种子集(504)

df_graph在
geom_text()
中使用
hjust=0.5
并适当地为正数填充标签,即预加空格字符以获得等长标签:

df_graph$text <- format(round(df_graph$value, 2))

df\u graph$text添加标签(
label=format(text)
)时使用
format
怎么样?我遇到的问题是,当表中有NAs时,format会使它们留在表中,并且NAs/0不会消失。也许可以更新您的示例,将NA包含在其中,以便它再现您的真实情况?我无法想象你怎么能用
填充
,但
文本中缺少值(基于
)。你只需在格式化后用空格替换缺少的
文本即可(因此需要
格式化
在@rcs answer中的绘图外)
df\u graph$text[df\u graph$text==“NA”]=”
我想我是想得太多了,没意识到格式化会解决这个问题。感谢您的帮助。我遇到的问题是,当表中有NAs时,格式会使它们留在表中,并且NAs/0不会消失。