python - 更改 Seaborn 应用调色板的轴
问题描述
我正在尝试使用 Seaborn 将一维数据框呈现为水平条形图。我想使用冷暖调色板对条形进行着色以反映它们的大小和方向。
换句话说,我希望生成类似于此处显示的第二个示例的内容(来自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()
推荐阅读
- r - 以原始方式打开 R 控制台,而不是在 linux 终端中
- sql-server - 在特定天数内选择一些数据
- mongodb - 如何根据 MongoDB 中的日期范围过滤数据?
- javascript - 在 for_loop 中使用 getElementsByClassName 不能正常工作
- c# - Ef-Core - 我可以使用什么正则表达式在 Db 拦截器中用 nolock 替换表名
- jenkins - 如何运行用户可以输入日期和时间值的 Jenkins 作业?
- c# - Instagram 提及 API - 无法在 DEV 模式下检索媒体详细信息
- javascript - 在JS中分组数组键
- php - 调用未定义的方法codeigniter异常
- c# - 如何在 Xamarin.Forms 的 Picker 中的 ItemDisplayBinding 中显示默认枚举值