自定义符号的R符号背景

5

我有一个R图,其中使用数值作为符号。点还有误差棒:

enter image description here

问题是,显然误差棒(我用箭头表示)穿过数字,看起来很丑并且使它们难以阅读。

这是我的代码,有什么想法吗?

x = c(45.58333, 89.83333, 114.03333,138.65000,161.50000,185.15000,191.50000)
y_mean = c(3.350000,6.450000,7.200000,7.033333,8.400000,7.083333,6.750000)
y_sd = c(0.1802776,0.1732051,0.2500000,0.2020726,0.3500000,0.2020726,0.1000000)

values = data.frame(x, y_mean, y_sd)

plot(values$x, values$y_mean, type="n")

arrows(values$x, values$y_mean - values$y_sd, 
  values$x, values$y_mean + values$y_sd, 
  length=0.05, angle=90,
  code=3, col="red")

lines(values$x, values$y_mean, type="b",
  pch=" ",
  col="red", bg="white")

text(values$x, values$y_mean, label=round(values$y_mean), col="red")

编辑: 我按要求执行了上面显示的精确代码: 在这里输入图片描述


有任何可重现的数据可以使用吗? - 989
是的,没问题,我已经添加了它 :-). - DP.
values$y_meanvalues$y_sd是程序相关的内容。 - 989
不好意思,我的代码实际上更为复杂(从SQL数据库中提取,聚合多个曲线等),所以我只是编写了这段代码,避免用其余的代码打扰你。现在它应该可以工作了。 - DP.
不好意思,我的意思是你最初提供的代码中没有包括这一行 plot(values$x, values$y_mean, type="n")。顺便说一下,看看我的答案。 - 989
显示剩余4条评论
3个回答

3
我会调整水平对齐并添加小点来跟踪原始位置。
points(values$x, values$y_mean, pch=19, col="red", cex=0.5)
text(values$x, values$y_mean, label=round(values$y_mean), col="red", adj = -0.2)

enter image description here


2
一种想法是在绘制文本之前,使用 rect() 将文本所在的图形区域涂白。虽然这种方法可能会完全遮盖误差线。
我们可以使用 strwidth()strheight() 计算出涂白矩形的正确尺寸。
x <- c(45.58333, 89.83333, 114.03333,138.65000,161.50000,185.15000,191.50000);
y_mean <- c(3.350000,6.450000,7.200000,7.033333,8.400000,7.083333,6.750000);
y_sd <- c(0.1802776,0.1732051,0.2500000,0.2020726,0.3500000,0.2020726,0.1000000);
xlim <- range(x);
ylim <- c(min(y_mean-y_sd),max(y_mean+y_sd));
plot(NA,xlim=xlim,ylim=ylim,xlab='x',ylab='y');
arrows(x,y_mean-y_sd,x,y_mean+y_sd,length=0.05,angle=90,code=3,col='red');
lines(x,y_mean,type='b',pch=' ',col='red',bg='white');
ls <- as.character(round(y_mean));
ex <- 0.4; ## whiteout expansion factor
lsw <- strwidth(ls); w <- lsw/2*(1+ex);
lsh <- strheight(ls); h <- lsh/2*(1+ex);
rect(x-w,y_mean-h,x+w,y_mean+h,col='white',border=NA);
text(x,y_mean,ls,col='red');

plot


谢谢,太完美了!:-D - DP.

2

只需应用这些更改:

plot(values$x, values$y_mean, type="n", 
xlim = c(min(values$x), max(values$x) + 20), 
ylim = c(min(values$y_mean)-1, max(values$y_mean)+1))

text(values$x, values$y_mean, label=round(values$y_mean), col="blue",  pos = 3)


不完全是我想要的,但另一种解决方法 :-). - DP.
好的,微小的更改带来了解决方案。您将问题陈述如下:“问题显然是误差线(我用箭头表示)穿过数字,这看起来很丑并使它们难以阅读。”现在,它看起来不再丑陋,而且易于阅读。任务完成 :) - 989

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接