En 1922 à Mexico City, alors que sa sœur Cristina (Mía Maestro) se marie, la jeune et pétulante Frida Kahlo (Salma Hayek) est victime d'un accident de bus. Au terme d'innombrables opérations et des soins continuels de sa mère Matilde (Patricia Reyes Spíndola), la jeune fille parvient à remarcher. Frida a mis à profit sa longue convalescence pour peindre avec le matériel offert par son père Guillermo (Roger Rees), photographe. Elle décide de montrer ses toiles à Diego Rivera (Alfred Molina), qui apprécie tant la femme que ses œuvres. Ce peintre, renommé pour ses fresques, l'entraîne dans le monde des artistes lors d'une soirée chez la célèbre photographe Tina Modotti (Ashley Judd). Il la fait par ailleurs adhérer au parti communiste dont il est le chef local. Bien qu'il reconnaisse, après deux divorces, ne pas être capable de fidélité, et qu'elle soit attirée par les femmes, les deux artistes convolent. D'abord furieuse de découvrir que Lupe Marín (Valeria Golino), la deuxième ex-épouse de Diego, occupe l'appartement du dessus, la jeune mariée devient son amie. Frida suit Diego à New-York, où il est célébré dans une grande exposition. Rencontrant le succès, le peintre est chargé des fresques du centre de Nelson Rockfeller (Edward Norton), mais est renvoyé pour leur caractère communiste. Quant à Frida, après une fausse couche, elle se rend à l'enterrement de sa mère. Elle convainc son mari déprimé de rentrer au Mexique. Bien qu'elle ait toujours toléré les aventures de Diego avec ses modèles, Frida divorce quand elle le surprend avec Cristina, sa sœur. Toutefois, ne sachant pas se passer d'elle, le peintre se fait pardonner. Les Rivera hébergent les Trotsky en exil. Léon Trotsky (Geoffrey Rush) appréciant les œuvres torturées de Frida, ils deviennent amants. Mais, lorsque madame Natalia Trotsky (Margarita Sanz) le découvre, le couple soviétique déménage. Grâce à André Breton (Omar Rodríguez), qui accompagnait Trotsky, Frida Kahlo expose à Paris. Alors que Diego a