我试图解决R中的一个小问题,试图在图中绘制3个不同的变量。我的数据框为Data
,它有4个名为Month
,Monto Otorgado acumulado
,% Vencida
和% Castigos
的变量。 Data
有下一个表单(我在最后一部分添加了dput()
Data
版本):
Month Monto Otorgado acumulado % Vencida % Castigos
1 abr 13 560492.3 0.000000000 0.01427317
2 may 13 1433973.4 0.007937344 0.01046045
3 jun 13 3016748.7 0.012917208 0.09281516
4 jul 13 4241217.7 0.032433503 0.07073440
5 ago 13 6251742.3 0.039709465 0.03039153
6 sep 13 6757161.2 0.055510741 0.05179690
7 oct 13 7408081.0 0.052154108 0.02024816
8 nov 13 7899980.3 0.051551260 0.02531652
Month
显示特定的一年中的某个月,Monto Otorgado acumulado
的值为700万,% Vencida
和% Castigos
为百分比。我试图在R中制作一个显示两个y轴的图形。考虑Monto Otorgado acumulado
的值,第一个y轴将显示比例,第二个y轴将显示考虑% Vencida
和% Castigos
的百分比值的比例。在x轴中使用变量Month
来显示变量Monto Otorgado acumulado
,% Vencida
和% Castigos
会发生什么。关于在ggplot中只绘制一个变量我有点想法,但在这种情况下对我来说是如此复杂。我希望得到一个这样的图形:
dput()
的{{1}}版本是下一个:
Data
感谢您的帮助。
答案 0 :(得分:5)
你可以在base
中执行此操作,但这有点烦人。您必须计算左轴和右轴之间的比率(在您的情况下,您希望左侧的9000000在右侧为14%)。您可以使用points
和lines
在同一设备上获取barplot
和plot
:
par(mar=c(5,5,2,3)+0.1)
ratio<-9e6/0.14
bar.col<-'#558ED5'
vencido.col<-'#77933C'
castigos.col<-'#FE0F0F'
b<-barplot(Data$'Monto Otorgado acumulado',names.arg=Data$Month,col=bar.col,border=FALSE,main='My Plot',ylim=c(0,9e6),axes=FALSE)
lines(b,Data$'% Vencida' * ratio, col=vencido.col,lwd=2)
points(b,Data$'% Vencida' * ratio, col=vencido.col,bg='white',pch=21)
lines(b,Data$'% Castigos' * ratio, col=castigos.col,lwd=2)
points(b,Data$'% Castigos' * ratio, col=castigos.col,bg='white',pch=21)
left.axis.pos<-seq(0,9e6,by=1e6)
axis(2,at=left.axis.pos,labels=formatC(left.axis.pos, big.mark = ",", format = "d"),las=2)
right.axis.ticks<-0:14
axis(4,at=(right.axis.ticks/100)*ratio,labels=paste0(right.axis.ticks,'%'),las=2)
legend('topleft',legend=c('Monto Otorgado acumulado','% Vencido','% Castigos'),col=c(bar.col,vencido.col,castigos.col),lty=1,lwd=c(4,2,2),bty='n')
par(mar=c(5,4,2,2)+0.1)