Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 直方图的标签帮助_R_Ggplot2_Label_Histogram - Fatal编程技术网

R 直方图的标签帮助

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

我有一组直方图,我想在+-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.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-要将答案标记为已接受,请单击答案旁边的复选标记,将其从灰色变为已填写。