Seite 1 von 1

[gelöst] Problem mit dem Parameter xlas in der Funktion corPlot()

Verfasst: Mi Aug 30, 2023 4:00 pm
von selbststaendiger
Hallo ihr Lieben,

ich hab im Moment ein Problem mit der Erstellung einer Korrelationsmatrix, die ich mit der Funktion corPlot() erstelle. Ich möchte die Achsenbeschriftungen auf der x-Achse formatieren, sodass sie orthogonal zur x-Achse stehen.

Damit ihr eine Chance habt, es nachzuvollziehen, stelle ich hier ein vollständiges Minimalbeispiel dar.

Code: Alles auswählen

library(readxl)
data = read_xlsx("data.xlsx", sheet = "Korrelationen", na = "NA")
library(Hmisc)
library(tidyverse)
library(psych)
corPlot(rcorr(as.matrix((data %>% select('Daten 1', 'Daten 2', 'Daten 3', 'Daten 4', 'Daten 5', 'Daten 6')), type="spearman", use="pairwise.complete.obs"))$r, xlas=2)
Die beispielhafte Datei data.xlsx habe ich in den Anhang eingefügt, ebenso die Abbildung, die dabei generiert wird.

Gemäß Dokumentation sollten die einzelnen Beschriftungen senkrecht zur x-Achse stehen. Egal, welchen Wert ich xlas mitgebe, es tut sich überhaupt nichts.

Testweise habe ich auch andere Parameter auf die Beschriftungen der x-Achse geworfen. xsrt funktioniert beispielsweise. Eine Drehung von 90° als Workaround taugt aber leider nicht.

Ach ja, die installierten Versionen entsprechen den heute aktuellen Versionen, sprich

R 4.3.1
psych 2.3.6

Ich nutze Linux, andere Betriebssysteme konnte ich jetzt noch nicht testen.


Meine Frage ist jetzt: Mach ich irgendetwas falsch? Wenn ja, wäre ich euch sehr dankbar, mir einen Tipp zu geben. Ist das möglicherweise ein Bug? Wenn ja, wo melde ich den?


Vielen lieben Dank!!!

Re: Problem mit dem Parameter xlas in der Funktion corPlot()

Verfasst: Mi Aug 30, 2023 8:25 pm
von bigben
Da gibt es auch noch ein Crossposting hier: http://www.r-forum.de/packages-und-add- ... t1539.html

Re: Problem mit dem Parameter xlas in der Funktion corPlot()

Verfasst: Do Aug 31, 2023 9:04 pm
von selbststaendiger
Hey, ja ich hatte es dort als erstes reingestellt, hab aber das Gefühl, dass dieses Forum hier generell aktiver ist. Daher auch hier. Ich hatte die beiden Foren als unabhängig voneinander gesehen.

Re: Problem mit dem Parameter xlas in der Funktion corPlot()

Verfasst: Do Aug 31, 2023 9:04 pm
von selbststaendiger
Ach ja, ich hab es jetzt auch unter Windows versucht. Das Ergebnis ist identisch.

Re: Problem mit dem Parameter xlas in der Funktion corPlot()

Verfasst: Fr Sep 01, 2023 11:59 am
von Athomas
Ich habe Dein Beispiel etwas gestrafft, um mögliche "Seiteneffekte" auszuschließen:

Code: Alles auswählen

library(randcorr)
library(psych)

Num               <- 8
CorrMat           <- randcorr(Num)
Namen             <- paste0("Var", 1:Num)
rownames(CorrMat) <- Namen
colnames(CorrMat) <- Namen 

corPlot(CorrMat, xlas=2)
Das Ergebnis ist dasselbe :( ...

Ich halte es für möglich, dass die beabsichtigte „unabhängige“ Orientierung der x- und y-Achse über xlas und ylas so gar nicht realisierbar ist und lediglich ein gemeinsames „las“ (0 – parallel zu Achse, 1 – immer horizontal, 2 – senkrecht auf Achse) möglich wäre…
Ist das möglicherweise ein Bug? Wenn ja, wo melde ich den?
Ich würde tatsächlich mal den Autoren von „psych“ https://cran.r-project.org/web/packages ... index.html freundlich befragen, was da los ist…

Re: Problem mit dem Parameter xlas in der Funktion corPlot()

Verfasst: Fr Sep 01, 2023 5:51 pm
von bigben
Hallo Jungs,

die Sache ist komplizierter und scheint etwas mit dem Speichern der Daten zu tun zu haben. Wenn ich Athomas' Code copypaste und mit las = 0 laufen lasse, zeigt mir Rstudio etwas anderes an als das daraus abgespeicherte PNG während ein daraus (aus RStudio) gespeichertes PDF wieder das anzeigt, was ich in RStudio gesehen habe:

Hier das PNG mit las = 2:
Rplot, las=2.png
Hier das PNG mit las = 0

Code: Alles auswählen

corPlot(CorrMat, xlas=0)
kommt das hier dabei heraus:
Rplot, las=2.png
Und hier das PDF mit las = 2:
Rplot, las=0.pdf
(6.17 KiB) 39-mal heruntergeladen
Ich halte es für möglich, dass die beabsichtigte „unabhängige“ Orientierung der x- und y-Achse über xlas und ylas so gar nicht realisierbar ist
Der Code hinter corPlot nutzt die Funktion axis, einmal mit las = ylas und einmal mit las = xlas

Kann es sein, dass die eine Rendermethode das las aus dem plot-Kommando und die andere das aus dem axis Kommando liest? Wenn das so wäre, dann hätte der package-Autor auch keine Erklärung/Lösung.

Ich bin tiefer verwirrt als gedacht. Ich würde mir überlegen, mit der Grafik mit falscher Ausrichtung zu leben, eine andere Bildexportfunktion zu probieren und wenn das alles nicht passt, gibt es keinen Mangel an Alternativen, wie man in R Korrelationsmatrizen plotten kann: https://www.google.de/search?q=R+plot+c ... e&tbm=isch

LG,
Bernhard

Code: Alles auswählen

> sessionInfo()
R version 4.2.2 (2022-10-31 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 22621)

Matrix products: default

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

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

other attached packages:
[1] psych_2.2.9  randcorr_1.0

loaded via a namespace (and not attached):
[1] compiler_4.2.2  parallel_4.2.2  tools_4.2.2     rstudioapi_0.14
[5] nlme_3.1-160    mnormt_2.1.1    grid_4.2.2      lattice_0.20-45

Re: Problem mit dem Parameter xlas in der Funktion corPlot()

Verfasst: Mo Sep 04, 2023 10:59 pm
von selbststaendiger
Danke euch!

Ich hab dem psycho-Autor mal geschrieben. Vielleicht weiß er ja was.

Ansonsten versuche ich, diese Matrix anders zu erstellen. Eigentlich hab ich aber halt gar keinen Plan von R, ich baue nur etwas nach, unterstütze dabei jemanden bei einer Bachelorarbeit.

Re: Problem mit dem Parameter xlas in der Funktion corPlot()

Verfasst: Di Sep 05, 2023 6:34 pm
von selbststaendiger
So, hab ne Antwort bekommen 8-)

Also er sagt, dass er da nen Bug reingebaut hat seit Version 2.3.3

In seiner aktuellen Development-Version ist es gefixt. Kann man installieren via

Code: Alles auswählen

install.packages("psych", repos="https://personality-project.org/r", type="source")
Es funktioniert! :D

Ich liebe Open-Source-Software!!!