我正在用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()
我应该添加些什么来做我想要的? 谢谢
答案 0 :(得分: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()