ggplot2 geom_col() unterscheidet sich von plot()

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

ggplot2 geom_col() unterscheidet sich von plot()

Beitrag von wbart »

Hallo,
ich habe eine Principle component analyse mit prcomp() gemacht. Nun versuche ich eine Scree plot zu machen. Wenn ich mir diesen mit dem plot() Befehl anschaue ist alles in Ordnung. Wenn ich versuche die Grafik mit ggplot2 in schön zu machen kommt eine Grafik heraus in der die Werte der x-Achse in der falschen Reihenfolge kommen.
Ich habe folgende Tabelle erstellt

Code: Alles auswählen

pca_GE_all_var_expl_tbl <-
  data.frame(PC = paste0(1:93),
             var_explained = pca_GE_all$sdev^2/sum(pca_GE_all$sdev^2))
Die Tabelle sieht so aus: Spalte PC Nummer von 1 bis 93, var_expl_tabl Werte geordnet vom höchsten zum kleinsten Wert.

Code: Alles auswählen

GE_all_var_expl_tbl
   PC var_explained
1   1  3.344084e-01
2   2  1.438074e-01
3   3  1.072239e-01
4   4  4.670794e-02
5   5  3.413497e-02
6   6  3.359805e-02
7   7  2.092461e-02
8   8  1.803073e-02
9   9  1.671627e-02
10 10  1.433452e-02
11 11  1.198894e-02
12 12  9.399608e-03
13 13  8.461168e-03
14 14  7.998514e-03
15 15  6.849114e-03
16 16  6.478053e-03
17 17  6.003372e-03
18 18  5.773242e-03
19 19  4.797188e-03
20 20  4.674142e-03
21 21  4.308319e-03
22 22  4.189525e-03
23 23  3.896836e-03
24 24  3.702643e-03
25 25  3.492253e-03
26 26  3.394300e-03
27 27  3.317103e-03
28 28  3.243657e-03
29 29  3.190355e-03
30 30  3.119645e-03
31 31  3.073774e-03
32 32  2.988087e-03
33 33  2.949264e-03
34 34  2.920289e-03
35 35  2.876176e-03
36 36  2.836995e-03
37 37  2.780262e-03
38 38  2.712839e-03
39 39  2.597859e-03
40 40  2.569712e-03
41 41  2.518777e-03
42 42  2.476687e-03
43 43  2.458967e-03
44 44  2.439450e-03
45 45  2.403536e-03
46 46  2.388050e-03
47 47  2.340619e-03
48 48  2.309623e-03
49 49  2.296063e-03
50 50  2.276667e-03
51 51  2.252636e-03
52 52  2.229747e-03
53 53  2.193251e-03
54 54  2.154634e-03
55 55  2.116372e-03
56 56  2.089635e-03
57 57  2.069938e-03
58 58  2.062687e-03
59 59  2.057265e-03
60 60  1.990263e-03
61 61  1.952521e-03
62 62  1.933391e-03
63 63  1.928793e-03
64 64  1.909842e-03
65 65  1.872618e-03
66 66  1.853267e-03
67 67  1.841589e-03
68 68  1.802654e-03
69 69  1.735345e-03
70 70  1.710964e-03
71 71  1.699947e-03
72 72  1.695379e-03
73 73  1.627852e-03
74 74  1.618843e-03
75 75  1.597681e-03
76 76  1.546884e-03
77 77  1.533414e-03
78 78  1.494242e-03
79 79  1.464179e-03
80 80  1.449263e-03
81 81  1.437032e-03
82 82  1.403733e-03
83 83  1.339541e-03
84 84  1.309905e-03
85 85  1.291101e-03
86 86  1.202688e-03
87 87  1.151050e-03
88 88  1.092907e-03
89 89  1.032700e-03
90 90  1.004124e-03
91 91  9.777109e-04
92 92  8.938960e-04
93 93  1.267195e-30
Die ggplot2 Grafik wollte ich wie folgt erstellen:

Code: Alles auswählen

ggplot(pca_GE_all_var_expl_tbl, aes(x=PC, y=var_explained))+
  geom_col()+
  labs(title = "Scree plot")
  
 
Das Ergebnis ist folgende Grafik angehängt als screeplot1. jpg.

Erwarten würde ich eine Grafik screeplot 2 von der Datenverteilung

Hat jemand eine Idee warum das so ist?

VG
Werner
Dateianhänge
screeplot2.jpeg
screeplot1.jpeg
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: ggplot2 geom_col() unterscheidet sich von plot()

Beitrag von Athomas »

Offenbar hast Du "PC" falsch - als Faktor - eingelesen.

Code: Alles auswählen

library(data.table)
library(ggplot2)

DT <- fread("P:/R/R Forum/ggplot/Daten.txt")

ggplot(DT, aes(x=PC, y=var_explained))+
  geom_col()+
  labs(title = "Scree plot")
Scree plot.jpeg
Dateianhänge
Daten.txt
(1.94 KiB) 61-mal heruntergeladen
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: ggplot2 geom_col() unterscheidet sich von plot()

Beitrag von bigben »

Hallo Werner,

Das Problem liegt dann wohl in dem paste0, das Strings erzeugt.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: ggplot2 geom_col() unterscheidet sich von plot()

Beitrag von Athomas »

bigben hat geschrieben: Di Mär 29, 2022 4:54 pm Das Problem liegt dann wohl in dem paste0, das Strings erzeugt.
Oha - das hatte ich gar nicht gesehen :oops: ! Wie kommt man denn auf sowas :o ?
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Re: ggplot2 geom_col() unterscheidet sich von plot()

Beitrag von wbart »

Aber was ist, wenn man Namen in der X Achse hat? Das ist doch eher der Normalfall?
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: ggplot2 geom_col() unterscheidet sich von plot()

Beitrag von Athomas »

Dann muss man die Faktorstufen in eine geeignete Reihenfolge bringen...

https://rstudio-pubs-static.s3.amazonaw ... 13469.html
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: ggplot2 geom_col() unterscheidet sich von plot()

Beitrag von bigben »

Wenn man statt ggplot2 die base Grafiken nimmt, dann hat man die Wahl: Nimmt man das formula-Interface von barplot, dann verhält es sich wie ggplot2:

Code: Alles auswählen

d <- read.table("http://forum.r-statistik.de/download/file.php?id=1710",
                header = TRUE)
d$PC = as.character(d$PC)
barplot(var_explained ~ PC, data = d)
Ruft man die Funktion stattdessen mit Vektoren ohne formula auf, dann plottet es so, wie hier gewünscht:

Code: Alles auswählen

barplot(height = d$var_explained, names.arg = d$PC,
        xlab ="Component", ylab ="Variance explained")
Rplot.png
Rplot.png (3.97 KiB) 1196 mal betrachtet
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Re: ggplot2 geom_col() unterscheidet sich von plot()

Beitrag von wbart »

Thanks to all !
Antworten