我正在尝试使用Seaborn将一维数据框显示为水平条形图。我想使用coolwarm调色板来阴影条以反映其大小和方向。
换句话说,我希望生成类似于此处显示的第二个示例的内容(来自Seaborn网站),但是我想使其水平定向:
我已经成功地将图形横向翻转了,但是我似乎无法使调色板也沿水平轴应用。我的代码:
import pandas as pd, seaborn as sns
sns.set()
df = pd.DataFrame([7,-5,-2,1.5,-3],
index=['question 1','question 2','question 3','question 4','question 5'],
columns=['t'])
sns.barplot(data= df,
x= 't',
y= df.index,
palette= 'coolwarm')
输出:
我希望它从左到右(而不是从上到下)从蓝色变为红色。
Seaborn不会执行任何真实的颜色映射。因此,如果需要这样做,则需要从外部进行。在下面,每个条根据其大小从颜色图中获取其颜色。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
sns.set()
df = pd.DataFrame([7,-5,-2,1.5,-3],
index=['question 1','question 2','question 3','question 4','question 5'],
columns=['t'])
absmax = np.abs(df["t"].values).max()
norm = plt.Normalize(-absmax, absmax)
cmap = plt.get_cmap("coolwarm")
colors = cmap(norm(df["t"].values))
plt.barh("index", "t", data=df.reset_index(), color=colors)
plt.colorbar(plt.cm.ScalarMappable(norm, cmap))
plt.gca().invert_yaxis()
plt.tight_layout()
plt.show()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句