0

我正在使用 seaborn 来绘制一些大脑区域的遗传力。我想根据大脑区域突出显示 x 轴上的标签。例如,假设我有白质区域和灰质区域。我想用红色突出显示灰质的大脑区域,用蓝色突出显示白质区域。我怎样才能做到这一点?

这是我使用的代码:

b = sns.barplot(x="names", y="h2" ,data=df, ax = ax1)
ax1.set_xticklabels(labels= df['names'].values.ravel(),rotation=90,fontsize=5)
ax1.errorbar(x=list(range (0,165)),y=df['h2'], yerr=df['std'], fmt='none', c= 'b')
plt.tight_layout()
plt.title('heritability  of regions ')
plt.show()

我应该添加什么来做我想做的事?谢谢

4

1 回答 1

2

您可以向数据框添加一个新列并将其用作hue参数。要更改刻度标签的颜色,您可以遍历它们并set_color根据灰色/白色列使用。

import seaborn as sns
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

df = pd.DataFrame({'names': list('abcdefghij'),
                   'h2': np.random.randint(10, 100, 10),
                   'grey/white': np.random.choice(['grey', 'white'], 10)})
ax1 = sns.barplot(x='names', y='h2', hue='grey/white', dodge=False, data=df)
ax1.set_xticklabels(labels=df['names'], rotation=90, fontsize=15)
# ax1.errorbar(x=list(range(0, 165)), y=df['h2'], yerr=df['std'], fmt='none', c='b')
for (greywhite, ticklbl) in zip(df['grey/white'], ax1.xaxis.get_ticklabels()):
    ticklbl.set_color('red' if greywhite == 'grey' else 'blue')
plt.title('heritability  of regions ')
plt.tight_layout()
plt.show()

示例图

于 2020-07-15T17:20:53.563 回答