The Sweden international opened the scoring six minutes before the break and doubled the lead with a penalty early in the second half.
Nemanja Pejcinovic reduced the deficit with 20 minutes to go but Ibrahimovic got his third shortly afterwards to seal the win.
Ibrahimovic had also come close to a spectacular goal on the half hour when he met Javier Pastore's cross with a backheel but goalkeeper Luca Veronese was alert and made a smart reflex save.
Lille saw their four-match winning run brought to an end with a goalless draw at Guingamp which was played out amid torrential downpours.
The inclement weather meant chances were few and far between at the Stade du Roudourou, while the visitors were unable to capitalise on the dismissal of Lionel Mathis 10 minutes from time with conditions deteriorating.
Despite the draw, Lille remain unbeaten in eight Ligue 1 matches and they climb back up to second, although they now have four points to make up on leaders PSG.
Nantes moved to within three points of third-placed Monaco in Ligue 1 after an emphatic 3-0 win at Bordeaux.
Bordeaux entered the game on a seven-match unbeaten run, including three wins in their last four games.
However, goals from Vincent Bessat, Papy Mison Djilobodji and Filip Djordjevic sealed all three points for the visitors in the Atlantic derby at the Stade Chaban-Delmas.
Victory also saw them go four points clear of Reims in fourth place while Bordeaux remain in mid-table despite only suffering their first defeat since a 2-0 loss to Paris St Germain in September.
Marseille put an end to a run of four Ligue 1 games without victory with a hard-fought 2-1 win over bottom-club Sochaux.
Andre-Pierre Gignac's second-half penalty was enough to secure all three points for Ellie Baup's men after Emmanuel Mayuka had cancelled out Florian Thauvin's early opener.
L'OM move back up to fifth with their first three points gained since an away win at Lorient back in September while defeat for Sochaux leaves them with just one Ligue 1 victory all season and firmly rooted the foot of the table.
An injury-time equaliser by Benjamin Stambouli prevented Valenciennes from claiming their second win of the season as they drew 1-1 with Montpellier.
Valenciennes had secured their first victory since the opening day of the campaign last week when they beat Ajaccio and appeared on course to add to their tally on Saturday when they entered injury-time at the end of the game leading through Benjamin Angoua's goal after just seven minutes.
Montpellier, who had been reduced to 10 men when Mathieu Delplagne was given a straight red card after 73 minutes, broke their hosts' hearts though as Stambouli headed home for their second successive draw.
Gianni Bruno's early goal proved the difference as Bastia beat Rennes 1-0 to continue their formidable run at home and move above their opponents in the table.
Bruno magnificently volleyed home in the eighth minute to give Bastia all three points at the Stade Armand Cesari for the third successive occasion as they moved up to 10th in the standings.
Frederic Hantz's men have dropped just two points at home in six fixtures and they handed Rennes a first defeat in five encounters.
Ten-man Lorient were forced to settle for a 0-0 draw with Reims despite largely dominating at the Stade du Moustoir.
Lorient had lost seven of their last nine matches prior to Saturday night but had several chances to take all three points against Hubert Fournier's men before losing Maxime Barthelme to a red card inside the final 20 minutes.
Reims could not maintain their three-match winning run but may have been happy to come away from Brittany with a goalless draw after being firmly pinned back in their own half for the opening 45 minutes.
Interim Ajaccio coach Christian Bracconi did his chances of getting the job on a full-time basis no harm as he halted a run of six straight defeats with a 1-1 draw against Toulouse.
The Corsican club sacked Fabrizio Ravanelli after last week's 3-1 defeat to fellow strugglers Valenciennes and Bracconi is expected to remain in charge until the winter break.
His reign got off to the perfect start with Paul Lasne giving Ajaccio the lead after just seven minutes but Issiaga Sylla grabbed an equaliser for Toulouse just before half-time.
On Friday night, Monaco had missed the chance to move level on points with PSG at the top as they were surprisingly held 1-1 at home by Evian.
The big-spending hosts had won five of their six home matches this season coming into the fixture but, despite star striker Radamel Falcao quickly cancelling out Daniel Wass's 21st-minute opener for Evian, Monaco could not find a winner against their mid-table opponents.
ames Rodriguez and drilled a shot past Hansen.