我有一个熊猫数据框df
,其列为x
(类别),y
和z
(均为浮动)。
这是我的条形图。
sns.barplot(data=df, x=x, y=y)
如何根据z
列的值为条形设置调色板?我想设置Matplotlib样式调色板,例如magma
或RdYlBu
。基本上,就像设置hue
参数一样,但具有标量变量。
谢谢!
答案 0 :(得分:1)
我不确定在seaborn中是否有办法做到这一点。但是通常直接使用matplotlib也可以。
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame({"x" : list("ABCDEFGH"),
"y" : [3,4,5,2,1,6,3,4],
"z" : [4,5,7,1,4,5,3,4]})
norm = plt.Normalize(df.z.min(), df.z.max())
cmap = plt.get_cmap("magma")
plt.bar(x="x", height="y", data=df, color=cmap(norm(df.z.values)))
plt.show()
如果“类别”列包含熊猫类别,而不是简单的字符串,则首先需要将其转换为df["x"] = df["x"].astype(str)
。
答案 1 :(得分:1)
只需使用与 hue 变量相对应的palette
参数:
sns.barplot(data=df, x=x, y=y, hue=z, palette='magma')
使用随机数据进行演示:
import numpy as np
import pandas as pd
import time
from datetime import datetime
import matplotlib.pyplot as plt
import seaborn as sns
data_tools = ['sas', 'stata', 'spss', 'python', 'r', 'julia']
np.random.seed(11212018)
rand_df = pd.DataFrame({'GROUP': np.random.choice(data_tools, 500),
'INT': np.random.randint(1, 10, 500),
'NUM': np.random.randn(500),
})
fig, ax = plt.subplots(figsize=(15,5))
sns.barplot(data=rand_df, x='GROUP', y='NUM', hue='INT', palette='magma', ax=ax, ci=None)
plt.legend(bbox_to_anchor=(1,0.5), loc="center right",)
plt.show()