Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Seaborn热图单元格中显示多个注释?_Python_Seaborn_Heatmap - Fatal编程技术网

Python 如何在Seaborn热图单元格中显示多个注释?

Python 如何在Seaborn热图单元格中显示多个注释?,python,seaborn,heatmap,Python,Seaborn,Heatmap,我希望seaborn热图在热图的每个单元格中显示多个值。下面是我想看到的一个手动示例,只是想澄清一下: data = np.array([[0.000000,0.000000],[-0.231049,0.000000],[-0.231049,0.000000]]) labels = np.array([['A\nExtra Stuff','B'],['C','D'],['E','F']]) fig, ax = plt.subplots() ax = sns.heatmap(data, anno

我希望seaborn热图在热图的每个单元格中显示多个值。下面是我想看到的一个手动示例,只是想澄清一下:

data = np.array([[0.000000,0.000000],[-0.231049,0.000000],[-0.231049,0.000000]])
labels =  np.array([['A\nExtra Stuff','B'],['C','D'],['E','F']])
fig, ax = plt.subplots()
ax = sns.heatmap(data, annot = labels, fmt = '')

以下是获取seaborn.heat以在单元格中显示
flightsRoundUp
值的示例

import matplotlib.pyplot as plt
import seaborn as sns
sns.set()

def RoundUp(x):
    return int(np.ceil(x/10)*10)

# Load the example flights dataset and conver to long-form
flights_long = sns.load_dataset("flights")
flights = flights_long.pivot("month", "year", "passengers")
flightsRoundUp =  flights.applymap(RoundUp)

# Draw a heatmap with the numeric values in each cell
f, ax = plt.subplots(figsize=(9, 6))
sns.heatmap(flights, annot=flightsRoundUp, fmt="", linewidths=.5, ax=ax)

在所有单元格中显示
flightsRoundUp
flights
的最佳方式是什么?类似于上面的第一个手动示例,但对所有单元都是矢量化的…

以下内容也适用于我:

X = pd.DataFrame({'a':[1, 2, np.nan], 'b':[10, 20, 30]})
Y = pd.DataFrame({'A':[11, 222, np.nan], 'B':[110, np.nan, 330]})

# convert to string
X_value_ann = (X).astype('|S5').reset_index()
Y_value_ann = (Y).astype('|S5').reset_index()

# define () and new line to glue on later
br = np.char.array(pd.DataFrame('\n(', index=X_value_ann.index, columns=X_value_ann.columns))
cl = np.char.array(pd.DataFrame(')', index=X_value_ann.index, columns=X_value_ann.columns))

# convert to chararray
X_value_ann = np.char.array(X_value_ann)
Y_value_ann = np.char.array(Y_value_ann)

# glue and reshape
my_annotation = pd.DataFrame(X_value_ann+br+Y_value_ann+cl)
my_annotation = my_annotation.applymap(lambda x: x.decode('utf-8')) 
my_annotation = my_annotation.drop(columns=[0])
my_annotation

Rotail的答案对我不起作用,我在应用lambda函数时出错了

然而,我发现了一个解决方案,它利用了seaborn将顺序图形绘制在彼此的顶部这一事实。您所要做的就是使用一个对heatmap的调用来建立图形,然后对每个注释进行后续调用。使用annot_kws arg确保文本没有相互覆盖

X = pd.DataFrame({'a':[1, 2, 3], 'b':[4, 5, 6]})
Y = pd.DataFrame({'A':['A', 'B', 'C'], 'B':['E', 'F', 'G']})
Z = pd.DataFrame({'A':['(Extra Stuff)', '(Extra Stuff)', '(Extra Stuff)'], 'B':['(Extra Stuff)', '(Extra Stuff)', '(Extra Stuff)']})

sns.heatmap(X, annot=False)
sns.heatmap(X, annot=Y, annot_kws={'va':'bottom'}, fmt="", cbar=False)
sns.heatmap(X, annot=Z, annot_kws={'va':'top'}, fmt="", cbar=False)

你是说?不完全是。但这帮助我将问题简化为能够通过
np.core.defchararray.add(X,Y)
组合X和Y,我还没有完全弄清楚这一点。下面是示例X和Y:
X=pd.DataFrame({'a':[1,2,np.nan],'b':[10,np.nan,30]})Y=pd.DataFrame({'a':[11222,np.nan],'b':[110,np.nan,330]})
如果元素都是没有任何nan的字符串。您共享的上面的链接将是我问题的精确解决方案。您是否尝试添加(X.values.astype(str),Y.values.astype(str))?@ImportanceOfBeingErnest有效。谢谢