我想制作一个简单的条形图,但我有一个问题,我在x轴上有重复的名称。因此,当我试图在x轴上写名时,它不会显示完整的字符串。我有以下数据
x <- c(1.8405917,0.3265986,1.5723623,464.7370299,0.0000000,3.2235716,
3.1223534, 7.0999787, 1.7122258,3.2005524,3.7531266,469.4436828)
我正在使用barplot
barplot(x,xlab=c("AA/AA","AA/CC","AA/AC","AA/NC","CC/AA","CC/CC","CC/AC",
"CC/NC","AC/AA","AC/CC","AC/AC","AC/NC"))
但它不起作用。我也用过
axis()
但它不起作用。
提前致谢。
答案 0 :(得分:21)
不,xlab
用于为图的整个x轴提供标签,而不是标记单个条。
barplot()
从绘制的矢量名称中获取条形的标签(或者可以导出到一组名称中的东西)。
> names(x) <- c("AA/AA", "AA/CC", "AA/AC", "AA/NC", "CC/AA", "CC/CC", "CC/AC",
+ "CC/NC", "AC/AA", "AC/CC", "AC/AC", "AC/NC")
> barplot(x)
> ## or with labels rotated, see ?par
> barplot(x, las = 2)
修改:@Aaron提及,barplot()
还有一个names.arg
来提供条形标签。这就是?barplot
所说的:
names.arg:
要在每个条形图或组的下方绘制的名称向量 酒吧。如果省略此参数,则会获取名称 来自names
的{{1}}属性,如果这是一个向量, 或列名称,如果它是矩阵。
这解释了如果未提供height
的默认行为 - 即从绘制的对象中获取名称。哪种用法对您最有用主要是品味问题。没有行/列/名称可能会稍微加快代码速度,但R的许多函数将直接从对象中获取names.arg
属性(或类似的行名称),因此您不必继续为其提供标签绘制/标记结果等。
答案 1 :(得分:11)
xlab
应为names.arg
。有关详细信息,请参阅?barplot
。
答案 2 :(得分:3)
使用axis()
的方法是捕获中点,这是barplot函数返回的内容。见?barplot
:
mids <- barplot(x, xlab="")
axis(1, at=mids, labels=c("AA/AA","AA/CC","AA/AC","AA/NC","CC/AA","CC/CC",
"CC/AC","CC/NC","AC/AA","AC/CC","AC/AC","AC/NC"),
las=3)
答案 3 :(得分:3)
试试这个:
barplot(x, cex.names=0.7,
names.arg=c("AA/AA","AA/CC","AA/AC","AA/NC","CC/AA","CC/CC","CC/AC",
"CC/NC","AC/AA","AC/CC","AC/AC","AC/NC"))