我已经使用geom_tile和geom_text创建了ggplot图。我希望能够读取一列中的数字并将它们全部列出。我将字体设置为Courier,然后使用hjust来证明数字的正确性(否则负号会抛出对齐)。然而,我无法找到一种方法来保持这个正确的理由,并将文本置于每个框中间。关于如何让数字排列起来以便您可以快速扫描列的任何想法?对齐文本右对齐,但在geom_text中的每个框的中心
下面是可重复使用的示例。
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()
)
添加标签('label = format(text)')? – aosmith
我遇到的问题是当表中有NAs时,格式将使它们停留在表上,并且NAs/0不会消失。 –
也许更新您的示例以包含NA,以便它再现您的真实情况?我无法想象如何通过“文本”中的缺失值(基于“值”)来“填充”值。格式化后,您可以简单地用空格替换丢失的“文本”(因此需要在@rcs答案中在图的外部格式化) - df_graph $ text [df_graph $ text ==“NA”] =“”' – aosmith