Arsenal survived the sending-off of striker Olivier Giroud for a reckless headbutt to beat QPR 2-1 at the Emirates Stadium and close back up on the top four of the Barclays Premier League.
The Gunners were in cruise control following Alexis Sanchez's 10th league goal on 37 minutes, the Chilean having seen a tame early penalty saved.
However, a rush of blood from France striker Giroud at the start of the second half reduced Arsenal to 10 men. The Frenchman charged into Nedum Onuoha, the defender hitting the ground in front of the referee.
Czech midfielder Tomas Rosicky, making a first start of the season, swept in a second on the break before Charlie Austin set up a tense finale when he converted a penalty with 11 minutes left.
Unlike at Liverpool last weekend, Arsenal held on under late pressure to move within two points of Southampton and one behind fifth-placed West Ham, whom they play on Sunday.
Arsenal, who had lost only one of their 17 previous Boxing Day Premier League matches, made an electric start and were awarded an early penalty when former Gunners defender Armand Traore tripped Sanchez.
The Chilean held onto the ball, and Santi Cazorla, who scored from the spot here against Newcastle, gave way.
However, Sanchez's effort lacked any real pace towards the bottom right corner, and Robert Green got down to make the save.
Arsenal's tempo dropped after the penalty miss, but the home side remained dominant in possession nevertheless as the conditions worsened.
Onuoha looked to have wrestled Danny Welbeck to the ground just inside the QPR penalty area, but this time referee Martin Atkinson was not interested.
Rio Ferdinand, making his first start since October, pulled back former United team-mate Welbeck to concede a free-kick 25 yards out in a central position and was cautioned.
Giroud whipped the ball over the wall, but Green made a smart diving save.
QPR, who had lost all eight of their Premier League away matches so far, continued to defend deep, with six men sitting around the edge of the 18-yard box.
The visitors' rearguard was, though, breached on 37 minutes.
Cazorla pushed the ball out to Kieran Gibbs on the overlap down the left.
The defender looked up before chipping a cross back through the six-yard box, where no-one had picked up the run of Sanchez as the diminutive Chilean guided a cushioned header into the far corner.
Arsenal were reduced to 10 men on 53 minutes following a moment of red mist by Giroud.
The France striker was bundled over by Onuoha on the edge of the area as they chased a long ball forwards.
Giroud, incandescent with rage, scrambled to his feet to confront the defender, pushing his forehead into the defender's face. Onuoha went to ground and the referee, who was right on the spot, reached for his back pocket to brandish a red card.
The Arsenal striker, who will now serve a three-match suspension, knew what was coming and headed straight down the tunnel as Gunners boss Arsene Wenger glared on.
Arsenal looked to respond by continuing their pressure, but QPR had been handed a lifeline and manager Harry Redknapp made a change on 62 minutes as Karl Henry was replaced by Leroy Fer and Traore by Junior Hoilett.
The Gunners, though, soon doubled their lead.
Sanchez made another penetrating run to the edge of the QPR penalty area, where he played in Rosicky on the overlap and the Czech midfielder dispatched a low, first-time shot past Green.
QPR then grabbed a lifeline with 11 minutes left after Mathieu Debuchy tripped Hoilett just inside the penalty area, with the referee again expertly placed although replays suggested the defender did get a touch on the ball.
Austin made no mistake from the spot, blasting the ball down the centre for his 12th goal of an impressive season.
Wenger sent on defender Calum Chambers for the closing stages, replacing Rosicky, and Mathieu Flamini bundled a goal-bound effort off the line as the Gunners battled to victory.
Mobile app users, watch the video highlights here.
200+ Channels With Sports & News
- Starting price: $33/mo. for fubo Latino Package
- Watch Premier League, Liga MX & Copa Libertadores
The New Home of MLS
- Price: $14.99/mo. for MLS Season Pass
- Watch every MLS game including playoffs & Leagues Cup
Many Sports & ESPN Originals
- Price: $10.99/mo. (or get ESPN+, Hulu & Disney+ for $14.99/mo.)
- Features Bundesliga, LaLiga, NWSL, & USL
2,000+ soccer games per year
- Price: $7.99/mo
- Features Champions League, Serie A, Europa League & EFL
175 Premier League Games & PL TV
- Starting price: $7.99/mo. for Peacock Premium
- Watch 175 exclusive EPL games per season