R 直方图的标签帮助
我有一组直方图,我想在+-1stdev和平均值上贴上标签。我有台词,但也要标签。我想标签朝向底部的直方图与白色背景,使字体是清晰的直方图颜色R 直方图的标签帮助,r,ggplot2,label,histogram,R,Ggplot2,Label,Histogram,我有一组直方图,我想在+-1stdev和平均值上贴上标签。我有台词,但也要标签。我想标签朝向底部的直方图与白色背景,使字体是清晰的直方图颜色 library(dply) library(ggplot2) a = runif(1000,1,100) b = runif(1000,1,100) c = runif(1000,1,100) amount = c(a,b,c) cat = c(rep("a",1000), rep("b",1000), rep("c",1000)) hist.da
library(dply)
library(ggplot2)
a = runif(1000,1,100)
b = runif(1000,1,100)
c = runif(1000,1,100)
amount = c(a,b,c)
cat = c(rep("a",1000), rep("b",1000), rep("c",1000))
hist.data = data.frame(amount,cat)
names(hist.data) = c("amount","cat")
hist.data$cat = factor(hist.data$cat, levels = c("a","b","c"))
pricedata = ddply(hist.data, c("cat"), summarize, avg = mean(amount), minus.stdev = mean(amount)-sd(amount),
plus.stdev = mean(amount) + sd(amount))
pricedata = pricedata[order(pricedata$avg),]
ggplot(hist.data, aes(x=amount, fill = cat))+
geom_histogram(color="white", alpha = .8, position = 'identity', binwidth = 5)+
theme_test()+
geom_vline(aes(xintercept = avg), data = pricedata, color = "black", size = 1)+
geom_vline(aes(xintercept = minus.stdev), data = pricedata, color = "black", size = .75, linetype = "dotted")+
geom_vline(aes(xintercept = plus.stdev), data = pricedata, color = "black", size = .75, linetype = "dotted")+
facet_grid(cat ~., scales = "free")+
scale_y_continuous(expand = c(0,0),name = "Count")+
scale_x_continuous(labels = scales::dollar, name="\nAmount", limits = c(0,100))
我建议将
pricedata
转换为长格式-这在一定程度上简化了geom\u vline
调用(尽管您必须添加size
和linetype
scales…),并使geom\u标签的使用变得非常简单。在这一点上,geom_label
是一个非常新的标签,它不允许您执行更改角度之类的操作
pricedata_long = tidyr::pivot_longer(pricedata, -cat)
ggplot(hist.data, aes(x=amount, fill = cat))+
geom_histogram(color="white", alpha = .8, position = 'identity', binwidth = 5)+
theme_test()+
geom_vline(aes(xintercept = value, linetype = name, size = name),
data = pricedata_long, color = "black", show.legend = FALSE) +
geom_label(aes(x = value, label = scales::dollar_format()(value)), data = pricedata_long,
y = 0, fill = "white", vjust = -.1,
show.legend = FALSE) +
scale_size_manual(values = c("avg" = 1, "minus.stdev" = 0.75, "plus.stdev" = 0.75)) +
scale_linetype_manual(values = c("avg" = "solid", "minus.stdev" = "dotted", "plus.stdev" = "dotted")) +
facet_grid(cat ~., scales = "free")+
scale_y_continuous(expand = c(0,0),name = "Count")+
scale_x_continuous(labels = scales::dollar, name="\nAmount", limits = c(0,100))
如果您想对现有代码进行最少的更改(尽管我同意其他答案更优雅),您可以在现有代码中添加三行
ggplot(历史数据,aes(x=数量,填充=类别))+
几何图形柱状图(颜色=“白色”,alpha=.8,位置='identity',binwidth=5)+
主题测试()+
几何图形(aes(xintercept=avg),数据=pricedata,color=“black”,size=1)+
geom_标签(aes(x=avg,y=10,标签=scales::dollar_format()(avg)),数据=pricedata,fill=“white”,size=3)+
geom_vline(aes(xintercept=减号.stdev),数据=价格数据,颜色=“黑色”,大小=.75,线型=“虚线”)+
geom_标签(aes(x=负.stdev,y=10,标签=scales::dollar_format()(负.stdev)),数据=pricedata,fill=“white”,size=3)+
几何图形(aes(xintercept=plus.stdev),数据=价格数据,颜色=“黑色”,尺寸=.75,线型=“虚线”)+
geom_标签(aes(x=plus.stdev,y=10,标签=scales::dollar_format()(plus.stdev)),数据=pricedata,fill=“white”,size=3)+
平面网格(cat~,scales=“free”)+
连续缩放(扩展=c(0,0),name=“计数”)+
比例x连续(标签=比例::美元,名称=“\n数量”,限制=c(0100))
简化的好主意-但是标签太大了。我研究了“标签”几何图形,你不能调整它的大小或修改它。有没有可能用geom\u rect和geom\u text来实现这一点?我试过了,但总是出错。我的意思是,你可以,但如果这很容易的话,geom_label就会这么做。对于给定的窗口大小,很难知道文本的大小,也很难将框放大一点。但是一定要试着调整标签的大小
——它可能有点笨重,但效果不错。不知道你在哪里读到的,你不能调整它的大小。这也是一个很好的解决方案-但是标签太大了。我研究了“标签”几何图形,你不能调整它的大小或修改它。有没有可能用geom\u rect和geom\u text来实现这一点?我尝试了这些,但不断出现错误。您可以在geom_label
try`size=3`中添加一个大小参数。我在答案中更改了它。我很乐意,但我不知道如何操作。Guidence please.LOL-要将答案标记为已接受,请单击答案旁边的复选标记,将其从灰色变为已填写。