【问题标题】:How to have many subscripts in this R read.csv for axis labels?如何在这个 R read.csv 中有许多下标作为轴标签?
【发布时间】:2017-04-11 15:37:50
【问题描述】:

数据代码

fem <- read.csv( text=
"female Bij,B11,B22,B33,B44,B21,B31,B32,B123
Sinus,1.0,0.0,0.0,0.0,0.0,0.0,12.0,0.0")

我想用下标代替expression(B[11]) 所以我的伪代码是

text=  
paste0("female ", expression(B[ij]), expression(B[11]), ..., expression(B[123]))  
Sinus,1.0,0.0,...")

也许,这可以通过更好或以后直接使用ggplot2 的函数来完成。 我最终将数据绘制为数据B11,...,B123female.Bij 中的位置

library("ggplot2")
g <- ggplot(datm, aes(variable, value, fill=gender)) + geom_bar(stat="identity", position = position_dodge()) + facet_grid(female.Bij ~ group) + xlab("Type") 
#http://stackoverflow.com/a/17335258/54964
g + labs( y="Counts")

测试 rawr 的答案

操作前和操作后,我的数据集

[1] "hello ==="
           male.Bij     gender             group              variable 
 Arr/AHB       :32   Length:128         Length:128         B11    :16  
 Digoxin arr   :32   Class :character   Class :character   B22    :16  
 Furosemide arr:32   Mode  :character   Mode  :character   B33    :16  
 Sinus         :32                                         B44    :16  
                                                           B21    :16  
                                                           B31    :16  
                                                           (Other):32  
     value                  male.Nij 
 Min.   : 0.000   Sinus         :32  
 1st Qu.: 0.000   Arr/AHB       :32  
 Median : 0.000   Digoxin arr   :32  
 Mean   : 1.407   Furosemide arr:32  
 3rd Qu.: 0.850                      
 Max.   :24.000                      

[1] "hello 2 ===="
           male.Bij     gender             group             variable        
 Arr/AHB       :32   Length:128         Length:128         Length:128        
 Digoxin arr   :32   Class :character   Class :character   Class :character  
 Furosemide arr:32   Mode  :character   Mode  :character   Mode  :character  
 Sinus         :32              

图。 1 个输出

g + scale_x_discrete(labels = parse(text = datm$variable))给了我

用字母测试 rawr 的答案

代码相关行

"female Bi,Bp,Br,Bt,B0,Bpr,Bpt,Brt,Bprt

输出

R:3.3.2
操作系统:Debian 8.5

【问题讨论】:

  • 下标在什么地方? paste0("female ", expression(B[ij]), ...) 只是一个字符串。你可以插入括号:gsub('(?&lt;=B)([^,]+)', '[\\1]', "female Bij,B11,B22,B33,B44,B21,B31,B32,B123", perl = TRUE) 但我不确定你真正想要什么
  • 对不起,你在更新中不需要那个正则表达式,请看我的更新

标签: r csv ggplot2 axis-labels subscript


【解决方案1】:

parse(text=...)) 是一种将字符串转换为表达式的简单方法,特别适用于绘图

parse(text = c('B[ij]', 'B[12]'))
# expression(B[ij], B[12])

在您的示例中,您可以插入括号并使用 parse/text

fem <- read.csv( text=
                   "female Bij,B11,B22,B33,B44,B21,B31,B32,B123
                 Sinus,1.0,0.0,0.0,0.0,0.0,0.0,12.0,0.0",
                 strip.white = TRUE)

datm <- reshape2::melt(fem)
datm <- within(datm, {
  ## take the first character as the base and the remaining
  ## characters as the subscript (wrap in brackets)
  variable <- gsub('(.)(.+)', '\\1[\\2]', variable)
})

library("ggplot2")
g <- ggplot(datm, aes(variable, value, fill=female.Bij)) +
  geom_bar(stat="identity", position = position_dodge()) +
  # facet_grid(female.Bij ~ group) +
  xlab("Type") 

g + labs( y="Counts") +
  scale_x_discrete(labels = parse(text = unique(datm$variable)),
                   breaks = unique(datm$variable))

【讨论】:

  • @Masi 你在做解析/文本的事情吗?轴标签需要是表达式+ scale_x_discrete(labels = parse(text = datm$variable))
  • @Masi 是的,试试scale_x_discrete(labels = parse(text = unique(datm$variable)), breaks = unique(datm$variable))
  • 请看正文。如果你今天能回答新问题,我会奖励你。我现在有我想用下标写的字母。你的方法可行吗?
  • @Masi 这取决于格式,是一个字母后跟下标吗?在这种情况下,只需更改正则表达式 variable &lt;- gsub('(.)(.+)', '\\1[\\2]', variable)
  • @Masi yes (.)(.+) 将使用一个字符作为基本(.),然后使用一个或多个字符作为下标(.+),并在(.+) 周围插入括号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 2020-08-16
  • 2011-11-01
相关资源
最近更新 更多