我刚刚开始学习R,但是我已经遇到了第一个问题。我想在图表中显示数据。我的数据在转换为.csv工作表的Excel工作表中。但是我的数据中有一些化学式如Fe2O3,而使用.csv时,所有子描述都消失了。看起来不太好。有什么方法可以将下标从原始Excel文件转换为R? 非常感谢您的帮助:)
编辑:我的数据包含在x轴上显示的6个化学公式,所有化学公式都包含下标(即Fe2O3,ZnCl2,CO2等),在y轴上显示数值。该图是条形图。我不确定是否有办法将数字更改为R中的子主题,或者在导入之前保留它们。
图形如下所示。但我想将数字作为下标:
答案 0 :(得分:2)
我不知道有一种方法可以将excel的格式转换为CSV,然后再转换为R,除非您可以使用unicode制作这些下标。 UTF8 symbols for subscript letters
鉴于您的化学品清单很短,因此调整化学品名称以帮助ggplot用下标解释它们的工作量不大。您需要在数字前后加上方括号,如果要包含更多元素,则在后面加上波浪号。然后,我们还告诉scale_x_discrete
“解析”标签并将这些符号转换为格式。
set.seed(42)
chem_df <- tibble(
Chemicals =
c("AgNO3", "Al2SiO5", "CO2", "Fe2O3", "FeSO4", "ZnCl2"),
Chemicals_parsed =
c("AgNO[3]", "Al[2]~SiO[5]", "CO[2]", "Fe[2]~O[3]", "FeSO[4]", "ZnCl[2]"),
Mean = rnorm(6, 50, 30))
ggplot(chem_df, aes(x=Chemicals_parsed, Mean)) + geom_col() +
scale_x_discrete(name = "Chemicals",
labels=parse(text=chem_df$Chemicals_parsed))
答案 1 :(得分:2)
要添加@JonSpring的出色答案,您可以编写一个函数,将""Al2SiO5"
之类的字符串转换为"Al[2]~SiO[5]"
之类的字符串,因此您不必手动进行所有转换:
library(stringr)
chem.form <- function(s){
s <- str_replace_all(s,"([0-9]+)","[\\1]~")
if(endsWith(s,"~")) s <- substr(s,1,nchar(s) - 1)
s
}
Chemicals <- c("AgNO3", "Al2SiO5", "CO2", "Fe2O3", "FeSO4", "ZnCl2")
Chemicals_parsed <- as.vector(sapply(Chemicals,chem.form))