R 在绘图中打印频率(作为数字)
在R中,我想在绘图中插入频率(作为数字):R 在绘图中打印频率(作为数字),r,plot,R,Plot,在R中,我想在绘图中插入频率(作为数字): my code to create the plot: par(mar=c(4.5,4.5,9.5,4), xpd=TRUE) plot(factor(ArtMehrspr)~Mehrspr_Vielf, data=datProjektMehr, col=terrain.colors(4), bty='L', main="Vielfalt nutzen") legend("topright", inset=c(0,-.225), t
my code to create the plot:
par(mar=c(4.5,4.5,9.5,4), xpd=TRUE)
plot(factor(ArtMehrspr)~Mehrspr_Vielf, data=datProjektMehr, col=terrain.colors(4),
bty='L', main="Vielfalt nutzen")
legend("topright", inset=c(0,-.225), title="Art der Mehrsprachigkeit", levels(factor(datProjektMehr$ArtMehrspr)),
fill=terrain.colors(4), horiz=TRUE)
par(mar=c(5,4,4,2)+0.1)
在图中,我的数据框有两列:ArtMehrspr
和Mehrspr\u Vielf
。
现在我想知道的是,有多少“Kombi”在“1”类中,有多少“Paral”在“1”类中,等等,然后在图中打印这个数字,这样在图的每个框中,我可以看到相应的观察数。R必须知道这些数字,否则它不能根据观察的数量改变不同盒子的高度。所以要把这些数字写进情节里不会那么难吧
使用命令table()
,我可以获得这些数字,但我必须使用5个table()
-命令才能获得所有数字。类别=1的示例:
> table(subset(datProjektMehr, Mehrspr_Vielf=="1")$ArtMehrspr)
einspr Kombi Paral Versc Wechs
0 1 9 2 1
显然,您可以通过添加命令labels=TRUE
来实现我想要的功能。但它不起作用:
par(mar=c(4.5,4.5,9.5,4), xpd=TRUE, labels = TRUE)
plot(factor(ArtMehrspr)~Mehrspr_Vielf, data=datProjektMehr, col=terrain.colors(4),
bty='L', main="Vielfalt nutzen")
legend("topright", inset=c(0,-.225), title="Art der Mehrsprachigkeit", levels(factor(datProjektMehr$ArtMehrspr)),
fill=terrain.colors(4), horiz=TRUE)
par(mar=c(5,4,4,2)+0.1)
R向我发出以下警告消息:
Warning message:
In par(mar = c(4.5, 4.5, 9.5, 4), xpd = TRUE, labels = TRUE) :
"labels" is not a graphical parameter
这不是正确的命令吗?有人知道怎么做吗?首先,
警告
告知您在par
中没有可以使用的标签
参数
关于表
输出的绘图,我不知道是否有一种简单的方法可以做到这一点,但我管理了一个非常不可靠,可能效率很低的代码。不过,在我的机器中,每次我运行它时,它都会工作
我想到的概念是将文本
中表
中的所有值都放在绘图中。为此,必须估计xx'和yy'中的坐标。我更喜欢术语“估计”而不是“计算”,因为我没有找到计算坐标绝对值的方法,因为plot
方法是plot.factor
因此:
情节:
编辑:1)“整理”答案。2) A向绘制在xx'轴上的系数添加一个额外的
级别
,以精确匹配您的数据。3)<代码>文本< /代码>在每个框中间的频率。 它也适用于我的电脑。非常感谢!!但这非常复杂,我发现R并没有提供一种更简单的方法,这让我感到惊讶。@user2878621:我不知道有什么函数可以做到这一点。不过,我想,一定存在着更漂亮、更快的方式。另外,我编辑了我的答案,以便与你的数据完全匹配。
#random data. DF = datProjektMehr, artmehr = ArtMehrspr, mehrviel = Mehrspr_Vielf
DF <- data.frame(artmehr = sample(letters[1:4], 20, T), mehrviel = as.factor(sample(1:5, 20, T)))
#your code of plotting
par(mar = c(4.5,4.5,9.5,4), xpd = TRUE)
plot(factor(artmehr) ~ mehrviel, data = DF, col = terrain.colors(4),
bty = 'L', main = "Vielfalt nutzen")
legend("topright", inset=c(0,-.225), title="Art der Mehrsprachigkeit", levels(factor(DF$artmehr)),
fill=terrain.colors(4), horiz=TRUE)
#no need to "table()" many times
tab = table(DF$artmehr, DF$mehrviel)
#maximum value of x axis (at least in my machine)
#I found -through trial and error- that for a factor of n levels, x.max = 1 + (n-1)*0.02
x.max = 1 + (length(levels(DF$mehrviel)) - 1) * 0.02
#coordinates of "mehrviel" (as I named it)
mehrviel.coords = ((cumsum(apply(tab, 2, sum)) / sum(tab)) * x.max) - ((apply(tab, 2, sum) / sum(tab)) / 2)
#coordinates of "artmehr" (as I named it)
artmehr.coords <- apply(tab, 2, function(x) { cumsum(x / sum(x)) })
artmehr.coords <- apply(artmehr.coords, 2, function(x) { x - c(x[1]/2, diff(x)/2) })
#"text" the values in your table
#don't plot "0"s
for(i in 1:ncol(artmehr.coords))
{
text(x = mehrviel.coords[i], y = artmehr.coords[,i], labels = ifelse(tab[,i] != 0, tab[,i], ""), cex = 2)
}
tab
1 2 3 4 5
a 1 1 0 1 0
b 0 0 2 1 2
c 1 1 2 1 0
d 2 0 0 3 2