r中的barplot:增加参数字体大小而不丢失参数,并将值绘制在bar附近

时间:2015-05-24 02:20:37

标签: r

我在r中几乎完成了Route::group( [ 'namespace' => 'Api\V1', 'prefix' => 'v1', ], function(){ Route::get('posts', ['uses'=>'PostsApiController@index']); Route::get('posts/{id}', ['uses'=>'PostssAPIController@show']); }); 。但它需要最后的修补。

这是我的代码

barplot

我得到的图表是 enter image description here

我真正想要的是类似于下面的图片, enter image description here

  1. 值viz 126,108 ..应正确放置(栏旁边)。

  2. 参数名称太小了。我希望它们清晰可见。当我尝试使用cex.names增加大小时,它不会出现在情节中。

  3. 我也尝试包含传奇。它没有用。

  4. 另外,如何减少条形图条的厚度?

3 个答案:

答案 0 :(得分:3)

  1. 值viz 126,108 ..应正确放置(靠近栏)。
  2. 您可以为pos定义值向量,以便为每个条形图定义单独的位置

    1. 参数名称太小了。我希望它们清晰可见。当尝试使用cex.names增加大小时,它不会出现在情节
    2. 您可以在cex电话

      中使用text参数
      1. 我也尝试包含传奇。它没有用。
      2. 请参阅?legend

        1. 另外,如何减少条形图条的厚度?
        2. 您可以使用space参数在条形图上添加空格

          一些代码

          HSI <- c(126,104,112,94,86)
          HSI <- HSI-100
          
          
          
          x <- barplot(HSI, main="HSI of Age", col=rainbow(10), space=2, 
                                                     horiz=T,axes=F, xlim=c(-50,50))
          
          axis(1,at=seq(-50,50,10), labels = seq(50,150,10))
          
          # add vertical line at HSI=100(0)
          abline(v=0)
          
          text(HSI, x, labels = 100+HSI, pos = c(2, 4)[(HSI>0)+1], cex=2) 
          
          legend("topright", legend=HSI+100,  title="Mylegend", fill=rainbow(10), horiz=F)
          

          哪个给出了

          enter image description here

答案 1 :(得分:2)

这是四个不同的问题。对于名称太小的问题2,将cex.names更改为更大的值(如1或2)。我无法重现它没有出现在情节中的问题,但解决该问题的一个方法可能是改变情节的边缘:

par(mar=c(3,6,3,3))

第二个参数是左侧边距。

我没有足够的声誉来添加评论以要求澄清,所以我必须把它放在这里。你在制作传奇时遇到了什么问题?我可以用legend(15,5,"legend stuff")做得很好,但更好的方法,因为你的情节高度不明确,就是使用内置选项legend.text

legend.text=c("thing 1","thing 2", "thing 3", "thing 4", "thing 5")

将此作为一个参数添加到barplot()函数中。

问题1的一个解决方案是为文本的位置选择不同的数字。例如:

HSITextPosition = 5*sign(HSI)+HSI
text(HSITextPosition, x, labels = 100+HSI)

对于问题4,您需要更改space中的barplot()选项,从而调整条形之间的空间。

总的来说,您应该阅读barplot()函数或您正在使用的任何其他函数的文档,因为它解释了很多内容。完整代码:

HSI <- c(126,104,112,94,86)
HSI <- HSI-100
HSITextPosition = 5*sign(HSI)+HSI

Category <- c("Group 1","Group 2","Group 3","Group 4","Group 5")

par(mar=c(3,6,4,4))
x <- barplot(HSI, main="HSI of Age", col=rainbow(10), names.arg=Category,
         cex.names=1, las=1, horiz=T,axes=F, 
         xlim=c(-50,50),space=2,
         legend.text=c("thing 1","thing 2", "thing 3", "thing 4", "thing 5"))
axis(1,at=seq(-50,50,10), labels = seq(50,150,10))
text(HSITextPosition, x, labels = 100+HSI)

enter image description here

答案 2 :(得分:1)

如果您愿意使用ggplot2,几乎所有内容都可以在图形语法中进行更改和调整。所以对于你的数据:

HSI <- c(126,104,112,94,86)
HSI <- HSI-100
df <- data.frame(HSI=HSI, 
                 Category=c("Above Rs 1cr", "Rs 50 Lakh to Rs 1cr",
                            "Rs 30 to 50 Lakh", "Rs 20 to 30s Lakh",
                            "Rs 10 to 20 Lakh"))

我们可以使用ggplot创建一个条形图,您可以在其中控制您要求的许多项目:

ggplot(df, aes(x=Category, y=HSI, fill=Category)) + 
  geom_bar(stat = "identity", aes(width=0.7)) + # adjust width to change thickness
  geom_text(aes(label=HSI, y=HSI+1.1*sign(HSI)),# adjust 1.1 -  to change how far away from the final point the label is
            size=5 # adjust the size of label text           
            )+ 
  coord_flip() + 
  theme_bw()

带输出:

enter image description here

如果您想了解更多信息,则需要了解如何更改项目。几乎任何事情都可以在ggplot中改变。