Итоговое среднее значение stat_Summary для группы значений

#r #position #mean #facet-wrap

#r #позиция #среднее #перенос фасета

Вопрос:

У меня есть следующая матрица :

 df1 <- read.table(text= 'Sample Al2O3_D1 CaO_D1 Fe2O3_D1 K2O_D1 SiO2_D1 TiO2_D1 Al2O3_D1b0 CaO_D1b0 Fe2O3_D1b0 K2O_D1b0 SiO2_D1b0 TiO2_D1b0 Al2O3_D2 CaO_D2 Fe2O3_D2 K2O_D2 SiO2_D2 TiO2_D2 Al2O3_D2b0 CaO_D2b0 Fe2O3_D2b0 K2O_D2b0 SiO2_D2b0 TiO2_D2b0 
BIL1    18.527771   18.256632   6.56251 8.342669    4.374867    0.5842755   17.7422245  23.987872   6.238913    6.780187    5.211082    0.1722543   14.524362   11.540785027    6.567724    11.59751    2.716793    0.148641    21.5237007  32.4114021  6.802355    12.696409   2.418464    0.9386197
Ha11    4.397232    12.888497   34.33309    52.961988   11.131223   45.1434655  15.0384636  12.980365   30.093978   54.002291   3.393567    38.6145158  12.323475   17.028706310    38.690775   49.06582    20.080664   45.619040   3.5297936   16.5442327  41.180170   47.440273   24.276975   44.3668208
Ha137   103.000052  2.212967    51.25095    306.746410  121.806659  63.6579611  212.8800243 2.165292    18.769017   364.236920  62.013419   21.9816389  106.235891  1.269353476 5.057160    287.15363   55.081696   58.204002   161.4670946 1.2884466   34.972412   298.504372  104.189560  31.8284467
Ha171   90.591557   1.569013    67.93309    232.845227  127.158291  75.5793762  254.3307398 1.513897    27.405290   310.109817  42.146396   27.6889288  79.012056   0.145186508 3.886563    222.66687   7.391477    68.673164   191.7846982 0.2314552   42.085088   246.272719  80.267907   36.9812088
Ha21    7.097864    17.014437   45.15964    69.600986   13.324667   55.9935294  25.9518750  17.074982   40.215454   74.263048   2.894586    46.7076167  15.344770   20.336227579    46.986192   62.41907    18.820986   55.880410   10.5328447  19.9025608  50.333141   60.448031   25.283637   52.3899333
Ha28a   14.276762   10.891896   36.92640    93.706836   22.456851   53.3221147  33.2916429  10.929970   31.081099   98.541650   11.519390   43.0020990  23.122859   13.698527956    38.803813   85.77801    28.915269   53.137565   17.2874734  13.2874359  42.799188   83.485379   35.607017   49.1309903
Ha45    8.755274    16.194970   23.72806    24.662651   10.998789   33.8922508  9.9868429   16.441356   22.187580   23.786921   6.279046    30.1799502  14.205216   22.219296703    30.537651   24.31487    22.675330   34.744338   4.7672324   21.8993271  30.730442   23.807887   24.471693   35.2918163
Ha56    2.519377    19.291306   17.78027    14.689078   1.340254    26.7134525  0.3009044   19.692186   16.525441   13.056810   1.866104    25.1075378  5.078764    25.877687826    24.668074   16.58434    12.172266   27.542356   0.9123158   25.9770408  24.642464   16.954296   13.036683   28.7758434
Ha78a   16.630011   10.518633   36.20753    65.697116   18.732162   49.0261161  31.7415436  10.576057   31.740250   68.840011   9.396106    41.7404661  25.679895   13.894132835    40.025832   59.56926    26.868566   49.336063   17.2903714  13.4394515  42.754641   57.575556   32.258478   47.4607437
Ha91    47.531258   6.963291    44.16573    120.753235  57.927836   57.5642663  92.4665900  6.947703    35.101718   135.376499  34.582463   39.3617521  56.780675   7.732582039 39.817328   109.13196   49.911602   56.081569   64.6430022  7.5310163   47.001601   108.587613  66.871031   46.5091579
L110    32.616500   6.162218    48.84669    204.508488  51.576478   64.5594220  100.1659655 6.133002    32.384991   232.810812  20.687400   40.3856100  35.670427   6.239853155 31.080776   188.34130   26.920909   61.901493   67.6463355  6.1250955   45.472784   190.557631  51.085145   47.6973747
L28d    213.963550  4.226734    91.60353    263.427318  250.950733  98.6845750  638.5723017 4.165268    36.270331   529.076984  70.311398   0.0038225   154.434579  2.280303654 3.936042    300.61284   42.674167   82.568998   501.6810607 2.4456430   49.319737   419.089754  116.983089  13.1846725
SARM41  9.206072    8.542555    16.87283    1.652141    6.469613    4.8801782   9.9053176   15.636966   17.675264   3.357829    7.712771    5.6633793   5.816894    1.068768333 9.466277    6.61795 1.658162    3.989925    12.5027313  25.0161949  9.891560    7.313323    1.511116    2.3360493', header=T, stringsAsFactors = F)
  

Это химический анализ для разных образцов, полученных разными методами (методы D1, D1b0, D2, D2b0). Итак, для каждого образца у меня есть анализ различных элементов (например) Al2O3, выполненный с использованием 4 методов (Al2O3_D1, Al2O3_D1b0, Al2O3_D2, Al2O3_D2bO)

Я хочу составить диаграмму изменений, связанных с каждым элементом и каждой техникой, со средним значением, полученным для каждого элемента и каждой техники в facet_wrap, поэтому я создал следующий код:

 df1 %>% 
  pivot_longer(cols = -Sample) %>% 
  separate(name, c("key","number"), sep = "_") %>%  
  group_by(number) %>% 
  ggplot(aes(x=number, y=value, fill = number))  
  geom_boxplot()  
  scale_fill_brewer(palette = "RdBu")  
  scale_y_log10(limits = c(0.01, NA))  
  theme(legend.position="bottom")  
  stat_summary(aes(y = value, label = round(..y.., 2)), 
               fun = mean, geom = "text", vjust=10,
               position = position_dodge(0.9))   
  facet_wrap(key~., ncol=2) 
  

Это две проблемы с этим кодом:

  • это дает мне среднее значение для чего-то другого, чем то, что я хочу. Я должен иметь для Al2O3: D1 135,32, D1b0 390,2, D2 100,29, D2b0 307,55 Вместо этого у меня есть D1 1,3, D1b0 1,53, D2 1,4, D2b0 1,38
  • Я хотел бы, чтобы все средние значения были выровнены по одной строке (например, вдоль линии 1e-1) поверх их соответствующей техники, но они не выровнены.

Большое спасибо за вашу помощь, Анна-Кристин

Ответ №1:

Вы можете использовать что-то вроде следующего

 df1 %>% 
  pivot_longer(cols = -Sample) %>% 
  separate(name, c("key","number"), sep = "_") %>%  
  group_by(number) %>% 
  ggplot(aes(x=number, y=value, fill = number))  
  geom_boxplot()  
  scale_fill_brewer(palette = "RdBu")  
  theme(legend.position="bottom")  
  stat_summary(aes(y = value, label = round(..y.., 2)), fun = mean, geom = "text",colour="darkblue")  
  facet_wrap(key~., ncol=2, scales = "free")
  

введите описание изображения здесь

Комментарии:

1. Дорогой Баппа, большое спасибо, как вы можете видеть, я повторно использую код, который вы помогли мне создать. Это очень полезно. Есть ли способ для моей проблемы иметь логарифмическую шкалу, но иметь числа в таблице в том виде, в каком они есть на графике, который вы создали? и второй вопрос, есть ли способ выровнять числа внизу или вверху графика, чтобы они были более заметны, чем внутри графика? большое спасибо за помощь

Ответ №2:

Я просто скопирую ответ Баппы и ваш обновленный код (у меня недостаточно репутации, чтобы просто прокомментировать)

 df1 %>% 
  pivot_longer(cols = -Sample) %>% 
  separate(name, c("key","number"), sep = "_") %>%
  group_by(key, number) %>% 
  mutate(mean = mean(value, na.rm = T)) %>% 
  ggplot(aes(x=number, y=value, fill = number))  
  geom_boxplot()  
  scale_fill_brewer(palette = "RdBu")  
  scale_y_log10()  
  geom_text(aes(label = round(mean, 2), y = 1e-01))  
  facet_wrap(key~., ncol=2)
  

Получив среднее значение перед созданием графика и преобразованием журнала, вы сможете обойти проблему с помощью имеющихся у вас средств. Числа совпадают с отображаемыми Bappa.

Используя geom_text, вы можете расположить метки там, где вам нравится.

введите описание изображения здесь

Комментарии:

1. Когда я применяю код, я получаю везде одинаковое среднее значение 51,82? Что пошло не так, я скопировал ваш код в свою R studio?

2. Хм, это странно. Я только что перезапустил его, и все работает нормально. Я попытался запустить код в другом месте, загрузив только tidyr, dplyr и ggplot2, и все это сработало. Вы видели изменение в строке для group_by group_by(key, number) ? Может быть, попробовать явно вызвать dplyr, so dplyr::group_by(key, number) и dplyr::mutate(mean = mean(value, na.rm = T)) ?

3. оооо, большое спасибо, действительно, это так работает, это великолепно. Я думаю, что там лидировал другой пакет. Спасибо