当前位置: 首页 > 知识库问答 >
问题:

我怎么能把值放在格子条形图的柱上,并有一个传说

饶骁
2023-03-14

已更新

如果我从自动关键点线中删除“points=FALSE”,图例将显示颜色,但不会显示矩形,而是圆形/点。

原始问题

我有一个包含图例的堆积条形图,我想在条形图中添加数字以显示相对值。我似乎能做到其中一个(传说和价值观),但不能两者兼而有之。

使用下面的测试代码,我得到了一个显示堆叠条形图中的值的图形。

dta <- data.frame(x=c(46.0, 14.7, 16.4, 15.8, 7.0), y=c("Back", "Neck", "Extrem", "MuscSkel", "Oth"))
barchart(data=dta, ~x, group=y,
         stack=T,col=sort(brewer.pal(7,"Purples")), xlab="Percent",
         box.width=.5, scales=list(tick.number=10),
         panel=function(x,y,...){
           panel.barchart(x,y,...)
           panel.text(cumsum(x)-dta$x/2,y,labels=dta$x)
         })

如果我运行此代码,我会得到一个带有图例的图表。

dta <- data.frame(x=c(46.0, 14.7, 16.4, 15.8, 7.0), y=c("Back", "Neck", "Extrem", "MuscSkel", "Oth"))
barchart(data=dta, ~x, group=y,
         stack=T, xlab="Percent",
         box.width=.5, scales=list(tick.number=10),
         auto.key = list(space="right", cex=.5, border=T, points=F, lines=F, lwd=5, text=c("Back", "Neck", "Extrem", "MuscSkel", "Oth")),
         par.settings=list(superpose.polygon=list(col = rainbow(length(c("Back", "Neck", "Extrem", "MuscSkel", "Oth")))), 
               fill=rainbow(length(c("Back", "Neck", "Extrem", "MuscSkel", "Oth")))))

但当我组合代码时,结果图不会显示图例中的颜色:

dta <- data.frame(x=c(46.0, 14.7, 16.4, 15.8, 7.0), y=c("Back", "Neck", "Extrem", "MuscSkel", "Oth"))
barchart(data=dta, ~x, group=y,
         stack=T, xlab="Percent",
         box.width=.5, scales=list(tick.number=10),
         auto.key = list(space="right", cex=.5, border=T, points=F, lines=F, lwd=5, text=c("Back", "Neck", "Extrem", "MuscSkel", "Oth")),
         par.settings=list(superpose.polygon=list(col = rainbow(length(c("Back", "Neck", "Extrem", "MuscSkel", "Oth")))), 
                             fill=rainbow(length(c("Back", "Neck", "Extrem", "MuscSkel", "Oth")))),
         panel=function(x,y,...){
           panel.barchart(x,y,...)
           panel.text(cumsum(x)-dta$x/2,y,labels=dta$x)
         })

任何帮助都将不胜感激。

共有2个答案

黄宏旷
2023-03-14

只要提到这个替代方案(因为您希望自己解决问题;)),您可以使用ggplot2获得相同的图表,您只需要使用dplyr创建一个新的列w

library(ggplot2)
library(dplyr)
dta %>% mutate(w = cumsum(x)) %>% 
  ggplot(., aes(xmin = w-x, xmax = w, ymin = 1, ymax = 3))+
  geom_rect( aes(fill = y))+
  geom_text(aes(label = x, x = w - x/2, y = 2))+
  ylim(0,4)+
  xlab("Percent")+
  ylab("")+
  theme(axis.text.y = element_blank(),
        axis.ticks.y = element_blank())
邵繁
2023-03-14

更改代码以将“矩形=T”添加到自动键行可以工作。它现在显示条形图中的值和带有颜色的图例代码如下所示:

dta <- data.frame(x=c(46.0, 14.7, 16.4, 15.8, 7.0), y=c("Back", "Neck", "Extrem", "MuscSkel", "Oth"))
barchart(data=dta, ~x, group=y,
         stack=T, xlab="Percent",
         box.width=.5, scales=list(tick.number=10),
         auto.key = list(space="right", cex=.5, border=T, points=F, rectangles = T, lines=F, lwd=5, text=c("Back", "Neck", "Extrem", "MuscSkel", "Oth")),
         par.settings=list(superpose.polygon=list(col = rainbow(length(c("Back", "Neck", "Extrem", "MuscSkel", "Oth")))), 
                             fill=rainbow(length(c("Back", "Neck", "Extrem", "MuscSkel", "Oth")))),
         panel=function(x,y,...){
           panel.barchart(x,y,...)
           panel.text(cumsum(x)-dta$x/2,y,labels=dta$x)
         })
 类似资料:
  • 我正在试图找到一种方法,如何将curl命令传输到C#。 我需要的是从api获取令牌并将其保存到文件C:\。。。\x、 json\ 然后我想将令牌声明为变量,并将其用于另一个curl POST请求以获取数据。 卷曲: 我目前的尝试: 我试了几样东西,但都不管用。这是从curl.olsh.me,但我也得到一些等待错误,我不知道该怎么办。(我是C#的新手): “await”运算符只能在异步方法中使用。考

  • 我要“登录” 而我愿意这样 我也使用Bootstrap4,但不是为了我想做的事情,我在某个地方读到,不使用Bootstrap,自己做更好。 下面是我使用的代码: css: html: 如果可以使用Bootstrap 4完成,我也可以。

  • 这是要的效果, 但我怎么调都只能这样 应该去调series还是y轴

  • 柱形图包括柱状图和条形图。 柱状图是用竖直的柱子来展现数据,一般用于展现横向的数据变化及对比。 条形图是用横向的柱子来展现数据,一般用于纵向的数据排名及对比。 一、柱状图 图4-7 Highcharts 柱状图 柱状图相关的配置参考 API 文档: 柱状图配置:针对当前数据列有效 柱状数据列配置 :针对当前页面的所有柱状数据列有效 二、条形图 条形图其实就是 X、Y 轴对调的柱状图,在 Highc

  • 是否可以像所附图像一样在表格中放置一个按钮?

  • 问题内容: 这是Highchart项目符号图表的示例http://jsfiddle.net/jlbriggs/LdHYt/1/ 如何将其转换为列项目符号图表? 问题答案: 这是您要找的东西吗?小提琴