我试图用相同的图形来绘制两组数据集,同时对每个数据集使用独立的共格集。我分别使用cmap_blue
和cmap_green
使用sns.choose_colorbrewer_palette('sequential')
创建了两个共枕。但是,当我试图使用以下代码绘制数据集时,第二个sns.set_palette()
似乎覆盖了第一个数据集,从而导致了这两个数据集的绿色梯度。
sns.set_context('paper')
fig, ax = plt.subplots(figsize=[2.5, 2.5])
ax.set_xlim(0,600)
ax.set_ylim(0,15)
sns.set_palette(cmap_blue)
ax.plot(time_prot60, SFT_prot60)
ax.plot(time_prot70, SFT_prot70)
ax.plot(time_prot80, SFT_prot80)
sns.set_palette(cmap_green)
ax.plot(time_buffer60, SFT_buffer60)
ax.plot(time_buffer70, SFT_buffer70)
ax.plot(time_buffer80, SFT_buffer80)
plt.grid(True)
plt.savefig('/content/gdrive/My Drive/SVG/prot.svg', format='svg', bbox_inches = 'tight')
发布于 2020-03-27 01:33:28
问题是sns.set_palette
为matplotlib设置了默认的颜色周期。但是颜色周期也是每个ax
的一个属性。因此,sns.set_palette
只对事后创建的ax
产生影响。在帖子的问题上,ax
已经创建得更早了,并且已经有了自己的颜色周期。
因此,要获得所需的行为,必须将调色板显式地分配给ax
。函数ax.set_prop_cycle
就是这样做的。这是一些代码。请注意,我将cmap_blue
重命名为palette_blue
,以区分颜色映射(输出颜色的函数)和调色板(颜色列表)。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from cycler import cycler
fig, ax = plt.subplots()
palette_blue = sns.color_palette("Blues")
palette_green = sns.color_palette("Greens")
ax.set_prop_cycle(cycler(color=palette_blue))
for i in range(1, 4):
plt.plot(np.linspace(0, 10, 100), 10 * i + np.random.normal(0, 1, 100).cumsum())
ax.set_prop_cycle(cycler(color=palette_green))
for i in range(4, 7):
plt.plot(np.linspace(0, 10, 100), 10 * i + np.random.normal(0, 1, 100).cumsum())
plt.show()
https://stackoverflow.com/questions/60877983
复制相似问题