library(rsdmx)
raw = as.data.frame(readSDMX("https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/usd.xml"))
greenback=rgb(red=13, green=82, blue=35, alpha=255, maxColorValue = 255)
greyusd=rgb(red=49, green=52, blue=45, alpha=255, maxColorValue = 255)
redusd=rgb(red=178, green=7, blue=25, alpha=255, maxColorValue = 255)
blueeur=rgb(red=0, green=50, blue=153, alpha=255, maxColorValue = 255)
yelloweuro=rgb(red=255, green=243, blue=21, alpha=255, maxColorValue = 255)
fixing=raw[,9]
date=as.Date(raw[,8],format="%Y-%m-%d")
items=seq(1,length(fixing),by=1) # setze "by=3" um weniger punkte zu zeichnen
png(filename="EurUsd.png", width=1400, height=900, pointsize=12)
par(bg=blueeur,mar=c(3,4.5,1.7,1.5)+0.1,font=2)
plot(date[items],fixing[items],type="n",xlim=c(10700,max(date)),xlab="",ylab="Wechselkurs (1 € = … USD)",cex.lab=1.7,col.lab="white",font.lab=2,col.axis="white",axes=FALSE)
usr=par("usr")
rect(xleft=usr[1], ybottom=usr[3], xright=usr[2], ytop=usr[4],col="white",border=NA)
yticks=seq(from=0.85,to=1.6,by=0.15)
axis(side=2,at=yticks,labels=format(yticks,nsmall=2,digits=3),font=2,col.axis="white",col="white",cex.axis=1.5,lwd=3)
yticksInner=seq(from=0.85,to=1.6,by=0.05)
axis(side=2,at=yticksInner,labels=NA,col.axis=NA,col.ticks=blueeur,lwd=0,lwd.ticks=2,tcl=0.5)
axis(side=4,at=yticksInner,labels=NA,col.axis=NA,col.ticks=blueeur,lwd=0,lwd.ticks=2,tcl=0.5)
startEUR=as.Date("1999-01-01")
xticks=as.Date(paste0(seq(1999,2025,by=2),"-1-1"))-startEUR
Sys.setlocale("LC_TIME", "German") #"Jan" und nicht "Jän"
axis(side=1,at=xticks+startEUR,labels=format(xticks+startEUR,"%b %y"),font=2,col.axis="white",col="white",cex.axis=1.5,lwd=3)
xticks2=as.Date(paste0(rep(seq(1999,2025,by=1),each=2),"-",c(1,7),"-1"))-startEUR
axis(side=1,at=xticks2+startEUR,labels=NA,col.axis=NA,col.ticks=blueeur,lwd=0,lwd.ticks=2,tcl=0.5)
axis(side=3,at=xticks2+startEUR,labels=NA,col.axis=NA,col.ticks=blueeur,lwd=0,lwd.ticks=2,tcl=0.5)
abline(v=xticks+startEUR,col=greyusd,lwd=1,lty="dotted") #statt grid
abline(h=yticks,col=greyusd,lwd=1,lty="dotted")
lines(date[items],fixing[items],col=greenback,lwd=3)
mini=which.min(fixing)
maxi=which.max(fixing)
lines(date[mini],fixing[mini],col=redusd,type="p",lwd=4,pch=23)
lines(date[maxi],fixing[maxi],col=redusd,type="p",lwd=4,pch=23)
legend(x=15500,y=1.58,"Wechselkurs EUR—USD ",adj=0,cex=2.85,bg=blueeur,text.col="white",border=NA)
dev.off()