在 seaborn barplot 中按列值定义色调
Define hues by column values in seaborn barplot
我希望列的颜色由它们在 x 轴上的值决定,例如x 轴上具有相同值的条应该分配有相同的颜色。
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
df = pd.DataFrame(index=['A','B','C','D','E','F'],data={'col1':np.array([2.3423,4.435,9.234,9.234,2.456,6.435])})
ax = sns.barplot(x='col1', y=df.index.values, data=df,palette='magma')
这是目前使用默认设置时的样子。我认为有一种简单优雅的方法可以做到这一点,但对任何解决方案都感兴趣。
这里有一个解决方案:
import seaborn as sns
import matplotlib as mpl, matplotlib.pyplot as plt
import numpy as np
import pandas as pd
df = pd.DataFrame(index=['A','B','C','D','E','F'],
data={'col1':np.array([2.3423,4.435,9.234,9.234,2.456,6.435])})
ax = sns.barplot(x='col1', y=df.index.values, data=df,
palette=mpl.cm.magma(df['col1']*.1))
注意:mpl.cm.magma
是一个 Colormap
实例,用于将数据值(浮点数)从区间 [0, 1] 转换为 Colormap
表示的颜色。如果您想要 "auto scaling" 的数据值,您可以在 sns.barplot()
调用中使用 palette=mpl.cm.ScalarMappable(cmap='magma').to_rgba(df['col1'])
。
此处输出:
我希望列的颜色由它们在 x 轴上的值决定,例如x 轴上具有相同值的条应该分配有相同的颜色。
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
df = pd.DataFrame(index=['A','B','C','D','E','F'],data={'col1':np.array([2.3423,4.435,9.234,9.234,2.456,6.435])})
ax = sns.barplot(x='col1', y=df.index.values, data=df,palette='magma')
这是目前使用默认设置时的样子。我认为有一种简单优雅的方法可以做到这一点,但对任何解决方案都感兴趣。
这里有一个解决方案:
import seaborn as sns
import matplotlib as mpl, matplotlib.pyplot as plt
import numpy as np
import pandas as pd
df = pd.DataFrame(index=['A','B','C','D','E','F'],
data={'col1':np.array([2.3423,4.435,9.234,9.234,2.456,6.435])})
ax = sns.barplot(x='col1', y=df.index.values, data=df,
palette=mpl.cm.magma(df['col1']*.1))
注意:mpl.cm.magma
是一个 Colormap
实例,用于将数据值(浮点数)从区间 [0, 1] 转换为 Colormap
表示的颜色。如果您想要 "auto scaling" 的数据值,您可以在 sns.barplot()
调用中使用 palette=mpl.cm.ScalarMappable(cmap='magma').to_rgba(df['col1'])
。
此处输出: