我有两个要绘制为带状图的DataFrame。我可以按照自己的意愿绘制它们,但是我想知道是否可以为“色相”添加类别标签。
该图当前如下所示:
但是,我想将类别的标签(只有两个)添加到每个字母的每个“列”中。这样看起来像这样:
DataFrames看起来像这样(尽管它们只是经过编辑的片段):
Case Letter Size Weight
0 upper A 20 bold
1 upper A 23 bold
2 lower A 61 bold
3 lower A 62 bold
4 upper A 78 bold
5 upper A 95 bold
6 upper B 23 bold
7 upper B 40 bold
8 lower B 47 bold
9 upper B 59 bold
10 upper B 61 bold
11 upper B 99 bold
12 lower C 23 bold
13 upper D 23 bold
14 upper D 66 bold
15 lower D 99 bold
16 upper E 5 bold
17 upper E 20 bold
18 upper E 21 bold
19 upper E 22 bold
...和...
Case Letter Size Weight
0 upper A 4 normal
1 upper A 6 normal
2 upper A 7 normal
3 upper A 8 normal
4 upper A 9 normal
5 upper A 12 normal
6 upper A 25 normal
7 upper A 26 normal
8 upper A 38 normal
9 upper A 42 normal
10 lower A 43 normal
11 lower A 57 normal
12 lower A 90 normal
13 upper B 4 normal
14 lower B 6 normal
15 upper B 8 normal
16 upper B 9 normal
17 upper B 12 normal
18 upper B 21 normal
19 lower B 25 normal
我拥有的相关代码是:
fig, ax = plt.subplots(figsize=(10, 7.5))
plt.tight_layout()
sns.stripplot(x=new_df_normal['Letter'], y=new_df_normal['Size'],
hue=new_df_normal['Case'], jitter=False, dodge=True,
size=8, ax=ax, marker='D',
palette={'upper': 'red', 'lower': 'red'})
plt.setp(ax.get_legend().get_texts(), fontsize='16') # for legend text
plt.setp(ax.get_legend().get_title(), fontsize='18') # for legend title
ax.set_xlabel("Letter", fontsize=20)
ax.set_ylabel("Size", fontsize=20)
ax.set_ylim(0, 105)
ax.tick_params(labelsize=20)
ax2 = ax.twinx()
sns.stripplot(x=new_df_bold['Letter'], y=new_df_bold['Size'],
hue=new_df_bold['Case'], jitter=False, dodge=True,
size=8, ax=ax2, marker='D',
palette={'upper': 'green', 'lower': 'green'})
ax.legend_.remove()
ax2.legend_.remove()
ax2.set_xlabel("", fontsize=20)
ax2.set_ylabel("", fontsize=20)
ax2.set_ylim(0, 105)
ax2.tick_params(labelsize=20)
是否可以为每一列添加那些类别标签(“粗体”和“普通”)?
答案 0 :(得分:1)
使用seaborn的散点图,您可以访问class Box():
def __init__(self, width=5, length=5):
self.width = width
self.height = length
def print_box():
for i in range(width):
for j in range(length):
if(i == 0 or i == width - 1 or j == 0 or j == length - 1):
print('*', end = ' ')
else:
print(' ', end = ' ')
>>> mybox = Box()
>>> mybox.print_box
(甚至是style
)参数。但是,您最终可能不会得到预期的布局。 scatterplot documentation。
或者您可以使用size
来处理行和列。 seaborn doc for catplot
不幸的是,Seaborn本身并没有提供您所需要的内容:catplot
中hue
参数之外的另一层嵌套(请参阅stripplot documentation。打开了一些可能与,例如this ticket。但是我已经在Seaborn中提出了一些类似的功能请求,但这些请求被拒绝了,请参见this ticket
最后一种可能性是潜入matplotlib原语来操纵您的seaborn图(因为seaborn刚好在matplotlib之上)。不用说,这将需要大量的努力,并且可能最终使seaborn无效;)