2016-12-08 2 views
0

Я пытаюсь создать пользовательский столбец заголовка граней, содержащий греческие символы, которые будут использоваться в ggplot. Но по какой-то причине функция expression() работает не так, как я ожидал.R Создание греческих символов в dataframe

Если я использую

df$fac <- ifelse(df$hour==1,expression(paste(df$hour+11, " - ", df$hour, " am; ", mu, 't=', round(df$exp), sep="")), "k") 

это приводит к

> tail(df,7) 
    hour  exp duration                fac 
18 1 3721141 921184.3   expression(paste(df$hour + 11, " - ", df$hour, " am; ", 
19 2 2175734 921844.5   mu, "t=", round(df$exp), sep = ""), "k", "k", "k", "k", 
20 24 6656036 919250.4               "k", "k") 
21 6 7869344 918690.6                <NA> 
22 4 2220189 920862.5                <NA> 
23 5 2780161 920005.2                <NA> 
24 3 2690003 922332.2                <NA> 
Warning message: 
In format.data.frame(x, digits = digits, na.encode = FALSE) : 
    corrupt data frame: columns will be truncated or padded with NAs 

и если я использую

df$fac <- ifelse(df$hour==1,paste(df$hour+11, " - ", df$hour, " am; ",expression(mu), 't=', round(df$exp), sep=""), "k") 

это дает мне

> tail(df,7) 
    hour  exp duration     fac 
18 1 3721141 921184.3 12 - 1 am; mut=3721141 
19 2 2175734 921844.5      k 
20 24 6656036 919250.4      k 
21 6 7869344 918690.6      k 
22 4 2220189 920862.5      k 
23 5 2780161 920005.2      k 
24 3 2690003 922332.2      k 

Как вы можете видеть, оба случая не дают мне греческого символа в dataframe. Я также использовал bquote() безрезультатно. Столбец с именем fac должен по существу хранить метку грани. Например, в течение часа 1 формат должен быть 12 - 1 am; μt= 3721141 Можете ли вы, пожалуйста, сообщить мне правильный подход здесь?

Вот выборочная данные

> dput(df) 
structure(list(hour = c(14L, 16L, 17L, 19L, 21L, 11L, 18L, 22L, 
8L, 12L, 23L, 9L, 15L, 13L, 7L, 10L, 20L, 1L, 2L, 24L, 6L, 4L, 
5L, 3L), exp = c(3923432.39149989, 5109851.42312691, 7070493.23531211, 
20803629.8380627, 11256055.2295972, 4757385.54314779, 27576092.3667234, 
9141934.32914581, 35348337.463401, 4108302.35295023, 6489550.8228499, 
9848278.71615835, 3816330.82689788, 3790223.01364096, 26886283.3156086, 
6308698.90957706, 17434998.9294133, 3721141.03502774, 2175733.94348253, 
6656035.63316213, 7869343.75835358, 2220189.45505708, 2780160.84185653, 
2690003.082563), duration = c(861081.7025, 865706.1025, 872852.945833333, 
892462.086388889, 908292.911111111, 862927.383055556, 882474.983055556, 
913184.621388889, 895447.985277778, 861349.923888889, 916578.3325, 
878670.013611111, 862413.049722222, 861035.062777778, 911718.763055556, 
868130.278333333, 901928.8125, 921184.328055556, 921844.501111111, 
919250.422777778, 918690.569722222, 920862.491111111, 920005.158333333, 
922332.197777778)), .Names = c("hour", "exp", "duration"), row.names = c(NA, 
-24L), class = "data.frame") 
+1

Не хранить выражения в data.frame. Просто установите свои метки фасетов, когда вы вызываете ggplot. Это поможет, если вы предоставили более [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) и опишите словами, что вы хотите в окончательный сюжет. – MrFlick

+0

Я добавил образцы данных с дополнительной информацией о формате, который мне нужен. Я пытался использовать этот df для создания меток для граней и вызова их с помощью функции labeller. – Gandalf

+0

Выведенный вами вывод 'dput', за которым следует код, который вы даете, не приводит к отображению data.frame. – jbaums

ответ

2

Не пытайтесь поставить выражения в вашем data.frame - вы можете включить вектор текста, который будет проанализирован, а затем использовать labeller=label_parsed:

library(ggplot2) 
d <- data.frame(x=runif(20), y=runif(20), grp=rep(c('mu', 'sigma'), 10)) 
ggplot(d, aes(x=x, y=y)) + 
    geom_point() + 
    facet_wrap(~grp, labeller=label_parsed) 

enter image description here

+0

Как вы можете понять, мои имена панелей состоят из 3 разных столбцов (один из которых является греческим символом). Я не совсем понимаю, как я могу реализовать это решение для достижения окончательного формата имен моих панелей. – Gandalf

+0

@ Gandalf - используя ваши данные, вы можете сделать что-то вроде этого ... 'df $ grp <- ifelse (df $ hour == 1, paste0 (df $ hour + 11, '-', df $ hour, '~ «am;» ',' ~ mu * t * ',' "=" ',' * ', round (df $ exp)),' k '); ggplot (df, aes (x = час, y = exp)) + geom_point() + facet_wrap (~ grp, labeller = label_parsed) '. Непонятно, как вы хотите построить данные, хотя ... – jbaums

Смежные вопросы