Jarek Statinowy

Jarek Statinowy Z zapałem do pracy

Temat: Dwie osie

Witam

Chciałbym do takiego wykresu dodać druga oś do zmiennej marża oraz dodać wartości na wykresie

d <- data.frame(okres=c(1L,2L,3L,4L,5L,6L,7L,8L,9L,10L,11L,12L),
przychody=c(6829,7508,9283,8725,3227,4902,3416,3039,825,7458,2215,4443),
koszty=c(-4123,-5659,-6986,-5682,-2452,-2485,-2095,-2103,-616,-6526,-1542,-3151)
)

d$okres <- factor(d$okres,levels=1:12, labels=c('styczeń', 'luty', 'marzec', 'kwiecień', 'maj', 'czerwiec','lipiec', 'sierpień',
'wrzesień', 'październik', 'listopad', 'grudzień'))
d$zysk <- d$przychody + d$koszty
d$marża <- round(d$zysk/d$przychody,4)
d

dane <- d %>% gather(Typ, Cashflow, przychody:marża)

dane.p <- dane %>% filter(Typ =='przychody')
dane.k <- dane %>% filter(Typ =='koszty')
dane.z <- dane %>% filter(Typ =='zysk')
dane.m <- dane %>% filter(Typ =='marża')

ggplot(data = dane, aes(x = okres, y = Cashflow)) +
geom_bar(data = dane.z, stat = "identity",fill = "#FFFF99")+
theme(axis.text.x=element_text(angle = 45,hjust=1))+
scale_y_continuous(expand = c(0, 0))+
geom_line(data = dane.m, aes(col = Typ, group = Typ))


Finalnie chciałbym taki efekt uzyskać

Obrazek


Proszę o pomoc
Wojciech Obłąk

Wojciech Obłąk Programista, Asseco
Poland

Temat: Dwie osie

edit: dopasowałem skalę, kolory i obramowanie

# data preparation ----------------------------

d <- data.frame(okres=c(1L,2L,3L,4L,5L,6L,7L,8L,9L,10L,11L,12L),
przychody=c(6829,7508,9283,8725,3227,4902,3416,3039,825,7458,2215,4443),
koszty=c(-4123,-5659,-6986,-5682,-2452,-2485,-2095,-2103,-616,-6526,-1542,-3151)
)

d$okres <- factor(d$okres,levels=1:12,
labels=c('styczeń', 'luty', 'marzec', 'kwiecień',
'maj', 'czerwiec','lipiec', 'sierpień',
'wrzesień', 'październik', 'listopad', 'grudzień'))
d$zysk <- d$przychody + d$koszty
d$marża <- round(d$zysk/d$przychody,4)
d


# drawing --------------------------------------

# adjust second plot to the first one
minMarza <- min(d$marża) - 0.04
tune <- max(d$zysk) / (max(d$marża) - minMarza + 0.01 )


ggplot(d, aes(okres, zysk)) +
geom_bar(stat = "identity", fill = "#FFEDA0", width = .7) +
geom_text(aes(label = format(zysk, big.mark = " ")), vjust = -0.5, hjust = 0.5, cex = 3) +
geom_line(aes(okres, (marża - minMarza) * tune ), group = 1, colour = "red", cex = 1.2) +
scale_y_continuous(sec.axis = sec_axis(~./tune + minMarza, labels = scales::percent, name = "marża [%]")) +
geom_label(aes(label = paste0(marża * 100, '%'), x = okres, y = (marża - minMarza) * tune ), vjust = 0.1, cex = 3)+
ggtitle("Wyniki finansowe w pewnej firmie", ) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 0.5),
plot.title = element_text(hjust = 0.5),
plot.background = element_rect(colour = "black", fill=NA, size=2))


Rowy wynik:

Obrazek
Ten post został edytowany przez Autora dnia 05.07.17 o godzinie 16:02
Jarek Statinowy

Jarek Statinowy Z zapałem do pracy

Temat: Dwie osie

Wielkie dzięki

Mi w międzyczasie udało się zrobić coś takiego

plotttt=ggplot(d, aes(okres)) + 
geom_bar(aes(y = zysk, color = "zysk"), stat="identity", fill = "#FFFF99") +theme_bw()+
theme(axis.text.x=element_text(angle = 45,hjust=1),
legend.position = "bottom")+
geom_line(aes(y = marża*6000, group = 1, color = "marża")) +
scale_colour_manual("", values=c("marża" = "red", "zysk" = "#FFFF99"))+
scale_y_continuous(expand = c(0, 0),limits=c(0,3100),sec.axis = sec_axis(~.*(1/60), name = "Marża [%]"))


W wolnej chwili może pomoże Pan także z tym wykresem słupkowym (post z wczoraj)

Następna dyskusja:

Jak porownac dwie proporcje?




Wyślij zaproszenie do