ggtern Dreiecksdiaramme

Alles zum Thema der beschreibenden Statistik

Moderator: jogo

Antworten
retep
Beiträge: 99
Registriert: Do Sep 06, 2018 7:50 pm

ggtern Dreiecksdiaramme

Beitrag von retep »

Hallo,

ich wollte mich mit folgenenden Anliegen um Hilfe bitten. Zur geologischen Auswertung eines Projektes benutze ich Dreicecksdiagramme Zu diesem Zweck bin ich auf das R package "ggtern" gestoßen. Zuerst war alles ok und das Package lief ohne Probleme! Seit Freitag läuft das Package nicht mehr. Auch die Code snippets, welche die Autoren selber bereitstellen sind funktionsuntüchtig! Meine Kontaktversuche die Auoren des Packages auf den Fehler hinzuweisen schlagen fehl. Deswegen meine Frage und bitte an die Spezialisten im Forum ob es einen Ausweg gibt. Hier die Code Snippets:

Code: Alles auswählen

install.packages('ggtern')
library(ggtern)

data("USDA", package = "ggtern")
dfLabels <- plyr::ddply(USDA, "Label", function(df) {
  label <- as.character(df$Label[ 1 ])
  df$Angle <- switch(label, "Loamy Sand" = -35, 0)
  colMeans(df[setdiff(colnames(df), "Label")])
  })
f5a <- ggtern(data = USDA, mapping = aes(x = Sand, y = Clay, z = Silt))+
  geom_polygon(mapping = aes(fill = Label),
                 alpha = 0.75, size = 0.5, color = "black") +
  geom_text(data = dfLabels, mapping = aes(label = Label, angle = Angle),
              size = 2.5) + theme_rgbw() + theme_showsecondary() +
  theme_showarrows() + custom_percent("Percent") +
  guides(color = "none", fill = "none") +
  labs(title = "USDA Textural Classification Chart",
  fill = "Textural Class", color = "Textural Class")

print(f5a)



Selbst beim Durchlaufen dieses Codes, was vorher problemlos möglich war tritt folgende Fehlermeldung auf:

Fehler: geom_point requires the following missing aesthetics: x and y
Run `rlang::last_error()` to see where the error occurred.
rlang::last_error()
<error/rlang_error>
geom_point requires the following missing aesthetics: x and y
Backtrace:
1. (function (x, ...) ...
2. ggtern:::print.ggplot(x)
4. ggtern:::ggplot_build.ggplot(x)
5. ggtern:::by_layer(function(l, d) l$compute_geom_1(d))
6. ggtern:::f(l = layers[], d = data[])
7. l$compute_geom_1(d)
8. ggplot2:::f(..., self = self)
9. ggplot2:::check_required_aesthetics(...)
Run `rlang::last_trace()` to see the full context.
> rlang::last_trace()
<error/rlang_error>
geom_point requires the following missing aesthetics: x and y
Backtrace:
x
1. +-(function (x, ...) ...
2. \-ggtern:::print.ggplot(x)
3. +-ggtern::ggplot_build(x)
4. \-ggtern:::ggplot_build.ggplot(x)
5. \-ggtern:::by_layer(function(l, d) l$compute_geom_1(d))
6. \-ggtern:::f(l = layers[], d = data[])
7. \-l$compute_geom_1(d)
8. \-ggplot2:::f(..., self = self)
9. \-ggplot2:::check_required_aesthetics(...)

Hier mein Session Info:

R version 4.0.2 (2020-06-22)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19042)

Matrix products: default

locale:
[1] LC_COLLATE=German_Germany.1252  LC_CTYPE=German_Germany.1252   
[3] LC_MONETARY=German_Germany.1252 LC_NUMERIC=C                  
[5] LC_TIME=German_Germany.1252   

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base    

other attached packages:
 [1] ggtern_3.3.0    ggpmisc_0.4.0   ggpp_0.4.0      ggthemes_4.2.4  forcats_0.5.1 
 [6] stringr_1.4.0   dplyr_1.0.6     purrr_0.3.4     tidyr_1.1.3     tibble_3.1.2   
[11] ggplot2_3.3.4   tidyverse_1.3.1 readr_1.4.0     readxl_1.3.1    rio_0.5.26    
[16] SDAR_0.9-55   

loaded via a namespace (and not attached):
 [1] nlme_3.1-148       matrixStats_0.59.0 fs_1.5.0           lubridate_1.7.10 
 [5] httr_1.4.2         latex2exp_0.5.0    tensorA_0.36.2     tools_4.0.2      
 [9] backports_1.2.1    utf8_1.2.1         R6_2.5.0           DBI_1.1.1         
[13] mgcv_1.8-31        colorspace_2.0-1   withr_2.4.2        tidyselect_1.1.1 
[17] gridExtra_2.3      grImport2_0.2-0    bayesm_3.1-4       curl_4.3.1       
[21] compiler_4.0.2     compositions_2.0-1 cli_2.5.0          rvest_1.0.0      
[25] quantreg_5.86      SparseM_1.81       xml2_1.3.2         labeling_0.4.2   
[29] scales_1.1.1       DEoptimR_1.0-9     robustbase_0.93-8  digest_0.6.27    
[33] foreign_0.8-80     base64enc_0.1-3    jpeg_0.1-8.1       pkgconfig_2.0.3   
[37] dbplyr_2.1.1       rlang_0.4.11       rstudioapi_0.13    farver_2.1.0      
[41] generics_0.1.0     jsonlite_1.7.2     zip_2.2.0          magrittr_2.0.1   
[45] polynom_1.4-0      Matrix_1.2-18      Rcpp_1.0.6         munsell_0.5.0    
[49] fansi_0.5.0        proto_1.0.0        lifecycle_1.0.0    stringi_1.6.2    
[53] yaml_2.2.1         MASS_7.3-54        plyr_1.8.6         grid_4.0.2       
[57] crayon_1.4.1       lattice_0.20-41    haven_2.4.1        splines_4.0.2    
[61] hms_1.1.0          pillar_1.6.1       reshape2_1.4.4     reprex_2.0.0      
[65] XML_3.99-0.6       glue_1.4.2         linbin_0.1.3       data.table_1.14.0
[69] modelr_0.1.8       png_0.1-7          vctrs_0.3.8        MatrixModels_0.5-0
[73] cellranger_1.1.0   gtable_0.3.0       assertthat_0.2.1   openxlsx_4.2.4   
[77] broom_0.7.7        conquer_1.0.2      ellipsis_0.3.2    


Auch der Versuch das Package auf einem 2. PC zum Laufen zu bringen schlägt erstaunlicherweise fehl!
Eine Websuche brachte keine wesentlichen Erfolge!

Da ich das Package dringend für den Projektfortschritt benötige, wäre meine Frage und Bitte ob es einen Workaround für solch einen Fehler gibt?

Vielen Dank für Eure Mühe & Geduld,

retep
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: ggtern Dreiecksdiaramme

Beitrag von EDi »

Sieht schlecht aus: Letzter commit 6 Jahre her,
mit neuem ggplot2 gibt's Probleme: https://github.com/nicholasehamilton/ggtern/issues/48

Quickfix: ggplot2 downgraden.

Besser: super Gelegenheit in die Open Source Entwicklung einzusteigen, das beschriebene Problem zu beheben und so der Community was zurückzugeben. Einfach einen fork machen und coden ;)
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
retep
Beiträge: 99
Registriert: Do Sep 06, 2018 7:50 pm

Re: ggtern Dreiecksdiaramme

Beitrag von retep »

Hallo Edi,

vielen Dank für die schnelle Antwort! 3 Fragen:

1. Den Link den du beigefügt hast, könnte ich unter diesem Thread mein Problem anbringe
2. Wie mache ich einen Downgrade von ggplot (auf dem 2. PC bietet sich das an). Wahrscheinlic müsste ich mir eine alte Version aus dem Archiv irgendwo holen?????
3. Ist ein Blick in die Glaskugel - aber warum hat das Package davor mühelos funktioniert?

Mit dem Fork - leider habe ich Null Knowledge einen Fork aufzusetzen. Aber eigentlich hast du Recht - würde der Community gerne was zurück geben!!!!!

THX

retep
retep
Beiträge: 99
Registriert: Do Sep 06, 2018 7:50 pm

Re: ggtern Dreiecksdiaramme

Beitrag von retep »

Hallo Edi,

PERFEKT!!!!!! Downgrade hat funktioniert. Jetzt kann ich in Ruhe weiterarbeiten! Nochmals vielen Dank für den Tipp!!!!!

Grüße,

retep
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: ggtern Dreiecksdiaramme

Beitrag von EDi »

Kurzfristig OK

Langfristig, aber eher eine suboptimale Lösung da man ggplot einfriert.

Mit 3.3.4 kamen z.B. viele bigfixes... https://cran.r-project.org/web/packages ... /news.html

Irgendjemand wird ggtern bestimmt fixen...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: ggtern Dreiecksdiaramme

Beitrag von bigben »

Ternary Plots ohne ggplot gäbe es sonst noch hier: https://cran.r-project.org/web/packages ... rnary.html

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: ggtern Dreiecksdiaramme

Beitrag von EDi »

Wenn ich aus dem Urlaub zurück bin (in 5 Wochen oder so :D ) und sich niemand um ggtern erbarmt hat - werde ich mir das mal anschauen.

Ist ja nicht so, dass ich das nicht nutze (z.B. Bodenzusammensetzungen, Desing of Experiments, etc)...

ggplot wurde mitlerweile ja auch schon gepatched, weil diese Version probleme bereitet hatte...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: ggtern Dreiecksdiaramme

Beitrag von bigben »

Mir ist es schon passiert, dass mein ggplot-Problem nach Installation der neuesten Version lösbar wurde. Neben dem Ausweichen auf eine base-Lösung könnte man vielleicht auch auf plotly ausweichen ( https://plotly.com/r/ternary-plots/#bas ... th-markers ) oder sich in ggplot selbst helfen. Das hier habe ich gefunden, aber nicht weiter verfolgt:

Code: Alles auswählen

# The biggest difficulty in the making of a ternary plot is to transform triangular coordinates into cartesian coordinates, here is a small function to do so: tern2cart <- function(coord){ coord[1]->x coord[2]->y coord[3]->z x+y+z -> tot x/tot -> x # First normalize the values of x, y and z y/tot -> y z/tot -> z (2*y + z)/(2*(x+y+z)) -> x1 # Then transform into cartesian coordinates sqrt(3)*z/(2*(x+y+z)) -> y1 return(c(x1,y1)) } # Apply this equation to each set of coordinates t(apply(df,1,tern2cart)) -> tern # Intrapolate the value to create the contour plot resolution <- 0.001 require(akima) interp(tern[,1],tern[,2],z=d, xo=seq(0,1,by=resolution), yo=seq(0,1,by=resolution)) -> tern.grid # And then plot: image(tern.grid,breaks=c(-1000,0,500,1000,1500,2000,3000),col=rev(heat.colors(6)),add=T) contour(tern.grid,levels=c(-1000,0,500,1000,1500,2000,3000),add=T) points(tern,pch=19)
versteckt aber auffindbar auf https://rpubs.com/volkanoban

Oder halt auf EDi warten.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten