【问题标题】:How to make the placement of asterisks in a barplot easier?如何使星号在条形图中的放置更容易?
【发布时间】:2015-05-22 13:49:23
【问题描述】:

我想在我的分组条形图(R 基)中放置星号,以指示配对比较显着不同的地方。我知道如何使用points 命令放置这些星星。但是,从我目前阅读的帖子来看,似乎需要手动找到正确的坐标(例如,第一组:x=0.635,y=26,请参见下面的代码)。如果需要为所有重要的货币对找出这一点,这将需要相当长的时间。

所以我的问题是:有没有更简单的方法来找到与中间对应的坐标并且就在成对的条旁边?目前我更愿意在基本绘图系统中执行此操作,但也欢迎 ggplot 答案。非常感谢您!

数据示例

set.seed(123)
dat<-matrix(runif(32, min = 0.5, max = 1), nrow=2, ncol=16)
colnames(dat)<-c(LETTERS[1:16])

par(mar=c(2,4,2,2)) 
mp<-barplot(dat, col=c("blue","red"), beside=TRUE, horiz=TRUE, xpd=FALSE, axes=FALSE, axisnames=TRUE, cex.names=0.8, las=2, xlim=c(0.5,1.0), main="Data Example") 

axis(1, at=seq(0.5,1.0, by=0.1))
axis(2, at=mp, labels=FALSE, tick=FALSE)

points(x=0.635, y=26, pch="*", cex=2) #sign position at I

【问题讨论】:

  • 我不明白你打电话给axis(2, ...) 是为了什么?还有,你是怎么定义0.635的?
  • 你说得对,实际上axis(2, ...) 是多余的。 0.635 是通过手工、反复试验定义的。所以这基本上是我的问题:如何以更简单的方式获得相应的坐标,它是否存储在图中的某个位置?
  • 那么,我的回答符合您的需求吗? (我的意思是,我理解你的要求对吗?)。您可以稍后根据刻度之间的间隔定义“偏移量”(此处为 0.01),例如,以确保它不“依赖于范围”。
  • 是的,这行得通,这绝对是我想要的。谢谢!
  • 太棒了!乐于助人:-)

标签: r bar-chart


【解决方案1】:

假设你有一个向量告诉你哪些对是重要的。例如:

sign <- rep(TRUE, 16) ; sign[c(5, 7, 13:14)] <- FALSE

你已经知道字母的 y 坐标了:

colMeans(mp)

因此您可以定义星号的 y 坐标:

ord_sign <- colMeans(mp)[sign]

对于 x 坐标,您可以将它们例如从最大值向右放置 0.01 点:

abs_sign <- apply(dat, 2, max)[sign] + 0.01

然后你可以一次画出所有的星号:

points(x=abs_sign, y=ord_sign, pch="*", cex=2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 2015-10-13
    • 2016-06-09
    相关资源
    最近更新 更多