Für ein Forstwirtschaftsprojekt will ich ein Balkendiagramm erstellen, dass mir den prozentualen Anteil eines Waldtypes an der Gesamtfläche eines Waldes anzeigt.
Mein Datensatz besteht aus 1241 obervations mit für diese Frage zwei relevanten Variablen:
area_ha: Fläche in Hektar eines Untersuchungsplots, im "num" Format.
MiWaReVe: 20 Klassen von Waldtypen, abgekürzt mit Nummerncodes, im "factor" Format.
Hier mal ein Minimaldatensatz von mir, als Beispiel:
Code: Alles auswählen
structure(list(Id = c(0L, 2L, 3L, 4L, 5L, 17L), MiWaReVe = structure(c(7L,
7L, 14L, 17L, 17L, 17L), .Label = c("", "0", "1.1.", "2.1.",
"2.2.1.", "2.2.2.", "2.3.1.", "2.3.2.", "3.1.1.", "3.1.2.", "3.2.1.",
"3.2.2.", "3.2.3.", "4.1.", "4.2.", "5.1.", "5.2.", "6.", "7.",
"8."), class = "factor"), area_ha = c(8.08759, 8.76723, 5.5033,
1.22659, 4.31278, 8.23421), Owner = structure(c(2L, 2L, 2L, 2L,
2L, 2L), .Label = c("Bundesforsten", "Kommunalwald", "Privatwald",
"Staatswald"), class = "factor"), hint_cl = structure(c(3L, 3L,
3L, 4L, 4L, 4L), .Label = c("A", "B", "C", "D", "E", "X"), class = "factor"),
area_in_per = c(0.216871128099877, 0.23509587657276, 0.147572624140449,
0.032891375182969, 0.115648476721321, 0.220802786950289)), .Names = c("Id",
"MiWaReVe", "area_ha", "Owner", "hint_cl", "area_in_per"), row.names = c(NA,
6L), class = "data.frame")
Code: Alles auswählen
library("ggplot2")
library("scales")
MiWaRe=read.table(file="2017_11_MiWaRe.csv", sep=";",dec="," , header=T)
str(MiWaRe)
# total area AOI
area_total=sum(MiWaRe$area_ha)
# area of each plot in % in a new column
MiWaRe=cbind(MiWaRe, "area_in_per"=MiWaRe$area_ha/area_total*100)
MiWaRe
sum(MiWaRe$`area_in_per`) # check
ggplot(data=MiWaRe, aes(x = factor(MiWaReVe), y=((area_in_per)/sum(area_in_per)))) +
geom_bar(stat="identity") +
scale_y_continuous(labels = percent)
Gerne würde ich noch mir die Prozentwerte über den Balken anzeigen lassen, und hier beginnen die Probleme. Ich habe das seit Tagen mit unterschiedlichen Abänderungen des folgenden Codes versucht:
Code: Alles auswählen
ggplot(data=MiWaRe, aes(x = factor(MiWaReVe), y=((area_in_per)/sum(area_in_per)))) +
geom_bar(stat="identity") +
scale_y_continuous(labels = percent)+
geom_text(aes(label = scales::percent((area_in_per)/sum(area_in_per)), y= ..prop.. ), stat= "count", vjust = 25)
Removed 19 rows containing missing values (geom_text)." (siehe auch Grafik 1)
Ich habe mich natürlich kundig gemacht über die Warnung, aber ich bin nicht wirklich weitergekommen und glaube kaum, dass das Problem am zu geringen Displayplatz liegt (habe auch mehrmals versucht den Anzeigebereich zu erweitern). Ich natürlich den Code auch versucht zu verändern, um das Problem zu umgehen, zumindest nach bestem Wissen und Gewissen, Beispielsweise damit:
Code: Alles auswählen
ggplot(data=MiWaRe, aes(x = factor(MiWaReVe), y=((area_in_per)/sum(area_in_per)))) +
geom_bar(stat="identity") +
scale_y_continuous(labels = percent)+
geom_text(aes( label = scales::percent(..prop..),
y= ..prop.. ), stat= "count", vjust = -1)
Aber dabei entsteht nur das, was Grafik 2 anzeigt.
Naja, wie ihr wohl gemerkt habt, bin ich noch relativ neu in R (fuchse mich da erst seit zwei Wochen rein), aber ich würde mich über Hilfe dennoch sehr freuen. Ich hoffe dazu ist mein Post auch verständlich genug geschrieben, wenn noch etwas gebraucht wird, liefere ich es sehr gerne nach!
Liebe Grüße