在我的 python 程序中,我有三组曲线,我想为每组曲线分配一个seaborn调色板并将它们全部绘制到一个图中。
到目前为止我的解决方案是以下代码。
sns.set_style('whitegrid')
volt = np.zeros(N)
states = np.zeros([6,N])
for k in range(1,4):
if k == 1:
sns.set_palette('Blues_d',6)
if k == 2:
sns.set_palette('BuGn_d',6)
if k == 3:
sns.set_palette('Oranges_d',6)
for i in range(N):
j = -1 + 2*float(i)/N
volt[i] = j*(mu[1]-mu[0])
state = evolve(s, ss, PP, beta, float(k) * D / 3, B, j * mu, tmax)
for j in range(6):
states[j,i] = state[j]
for i in range(6):
y = np.zeros(N)
for j in range(N):
y[j] = states[i,j]
plt.plot(volt,y)
plt.show()
但是,绘图最终总是在第一个调色板“Blues_d”中渲染。如何更改代码,以便第一组曲线用“Blues_d”绘制,第二组曲线用“BuGn_d”绘制,第三组曲线用“Oranges_d”绘制,但在同一图中?
最佳答案
我意识到这并不能直接回答你的问题(部分原因是你的代码不是一个最小的工作示例),但如果你要使用 seaborn
那么它可能在您最感兴趣的是开始使用 pandas
处理您的数据。很多 seaborn
都是在考虑 pandas
的情况下编写的,因此这两个 jive 非常好。使用多个调色板绘图就是一个这样的例子,
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns; sns.set_style('whitegrid')
x = np.linspace(0, 3, 31)
U_df = pd.DataFrame({
'u1': 2.6*x**2 - 4.5,
'u2': 2.5*x**2 - 4.9,
'u3': 2.3*x**2 - 4.7}, index=x)
V_df = pd.DataFrame({
'v1': -5.1*x + 11,
'v2': -4.9*x + 10,
'v3': -5.5*x + 12}, index=x)
W_df = pd.DataFrame({
'w1': -6.5*(x-1.6)**2 + 9.1,
'w2': -6.2*(x-1.8)**2 + 9.5,
'w3': -6.1*(x-1.5)**2 + 9.7}, index=x)
fig, ax = plt.subplots()
U_df.plot(ax=ax, color=sns.color_palette('Blues_d', 3))
V_df.plot(ax=ax, color=sns.color_palette('BuGn_d', 3))
W_df.plot(ax=ax, color=sns.color_palette('Oranges_d', 3))
ax.legend(ncol=3, loc='best')
关于python - 一个图中具有不同seaborn调色板的曲线族,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41806066/