如何在matplotlib中更改多个图的默认颜色?

3

我希望在 Jupyter 笔记本中的每个绘图都使用相同的色图/颜色循环/调色板。

使用 seaborn 包,我可以使用以下代码:

seaborn.set_palette('Set1')  

有没有一种只使用matplotlib而不使用seaborn就能做到同样效果的方法?
我知道如何为每个图形单独定义颜色映射,也知道预定义的样式(例如ggplot),但我找不到一种同时为所有图形定义颜色映射的方法。
我的意图是简化我的学生们的代码,因此使用set_palette()背后复杂的代码不是一个选择。
编辑:正如所接受的答案所示,我混淆了颜色映射和颜色循环。

1
set_palette 的源代码可以在这里找到。由于有一些辅助函数,如果没有 seaborn,要复制 set_palette完全行为需要相当多的代码。但是如果你只想要其中的某个子集行为,你可以在源代码中找到你需要的内容。或者解释一下你想要的子集行为(一个具体的用例,你的 Python 版本和 Matplotlib 版本),也许我们可以帮助你。 - unutbu
是的,我尝试过这个方法,但我的目的是让我的学生们更容易理解代码,正如你所说,这需要很多辅助函数。我会澄清我的问题。 - lincolnfrias
1个回答

9
matplotlib中的默认色图是“viridis”。这在rcParam "image.cmap"中设置。
可以通过"axes.prop_cycle" rcParam更改默认颜色循环。
import matplotlib.pyplot as plt
# to change default colormap
plt.rcParams["image.cmap"] = "Set1"
# to change default color cycle
plt.rcParams['axes.prop_cycle'] = plt.cycler(color=plt.cm.Set1.colors)

谢谢,但据我所知,这仅适用于图像(使用imshow()创建的绘图),而不适用于常规绘图(散点图、条形图等)。如果我错了,请告诉我。 - lincolnfrias
这适用于使用颜色映射的任何图。然后它将使用您指定的rcParam作为颜色映射,例如散点图。Matplotlib条形图不使用任何颜色映射,那么您会期望发生什么? - ImportanceOfBeingErnest
我正在寻找与 set_palette() 相同的行为。如果我重新定义了色图,例如 plt.rcParams["image.cmap"] = "Accent",当我调用 plt.scatter(x[:,0],x[:,1])(没有颜色参数)时,它将使用色图上的第一种颜色。但也许我错误地期望色图像调色板一样工作。 - lincolnfrias
1
啊,你不想在这里更改任何颜色映射。你想设置默认的颜色循环。我相信这两个组合会给你想要的结果。但我也相应地编辑了答案。如果不是,你可以更具体地提问。 - ImportanceOfBeingErnest
是的,那正是我想要的!但这真的是一个重复的问题。我应该删除它吗?我不想浪费你的努力。 - lincolnfrias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接