Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.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 热图简单定制二进制图例_Python_Matplotlib_Seaborn - Fatal编程技术网

Python 热图简单定制二进制图例

Python 热图简单定制二进制图例,python,matplotlib,seaborn,Python,Matplotlib,Seaborn,我有一个带有热图图的True和False值的数据框: import matplotlib.pyplot as plt import seaborn as sns from matplotlib.colors import LinearSegmentedColormap df = pd.DataFrame({'A': {1: False, 2: False, 3: False, 4: True, 5: True, 6: True, 7: False, 8: False}, 'B'

我有一个带有热图图的
True
False
值的数据框:

import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.colors import LinearSegmentedColormap

df = pd.DataFrame({'A': {1: False,  2: False,  3: False,  4: True,  5: True,  6: True,  7: False,  8: False},
 'B': {1: False,  2: False,  3: True,  4: True,  5: False,  6: True,  7: True,  8: False},
 'C': {1: False,  2: True,  3: False,  4: False,  5: False,  6: False,  7: True,  8: True}})

fig, ax = plt.subplots(figsize=(3,3))
cmap = sns.mpl_palette("Set2", 2)
sns.heatmap(data=df, cmap=cmap, cbar=False)
plt.xticks(rotation=90, fontsize=10)
plt.yticks(rotation=0, fontsize=10)
plt.show()

我试图在绘图之外添加一个简单的图例,其中红色为True,绿色为False,红色为missing value,绿色为non missing value。我不想在热图上看到一个连续的图例(这就是为什么
cbar=False

我尝试了多种解决方案(也来自其他情节),但都没有成功:,,等等,但它们都太复杂,无法适应热图。我要找的东西是:

plt.legend(values=[1,0], colors=["red", "green"], label_legend=["missing value", "non missing value"])
有什么建议吗?

您可以按如下方式创建一个:

导入matplotlib.pyplot作为plt
从matplotlib.patches导入修补程序
导入seaborn作为sns
作为pd进口熊猫
df=pd.DataFrame({'A':{1:False,2:False,3:False,4:True,5:True,6:True,7:False,8:False},
'B':{1:False,2:False,3:True,4:True,5:False,6:True,7:True,8:False},
‘C’:{1:False,2:True,3:False,4:False,5:False,6:False,7:True,8:True})
图,ax=plt.子批次(图尺寸=(3,3))
cmap=sns.mpl_调色板(“Set2”,2)
sns.heatmap(数据=df,cmap=cmap,cbar=False)
plt.xticks(旋转=90,字体大小=10)
plt.yticks(旋转=0,字体大小=10)
图例#句柄=[Patch(color=cmap[True],label='Missing Value'),#红色
贴片(颜色=cmap[False],标签=”非缺失值“)]#绿色
plt.legend(手柄=手柄,ncol=2,bbox-to-U锚定=[0.5,1.02],loc='lower-center',fontsize=8,手柄长度=.8)
plt.紧_布局()
plt.show()

创建一个“面片”(2D填充形状),默认情况下该面片为矩形,并且可以指定颜色

cmap[value]
其中值最好是0到1之间的数字,给出相应的颜色。请注意,“True”和“False”在用作数值时会转换为1和0。上面的代码使用“True”和“False”与数据帧进行比较,以提高可读性。还请注意,语法是
cmap(value)
,带有圆括号,表示常用的matplotlib颜色映射(seaborn使用了一些不同的语法,因为它扩展了matplotlib功能)

图例的列表是要放入图例中的图形元素的列表。通常,它们是由许多函数自动创建的,但是当需要非标准的东西时,您可以使用自己的。如果“句柄”已经有了自己的标签,它们将在图例中使用。使用
标签=
,可以更改它们


更多信息可以在链接文档中找到,例如。

它可以工作!,谢谢你能解释一下逻辑吗?
Patch
函数做什么,以及
Patch
函数的
color
参数中的
True
False
值?例如,
处理来自
plt.legend()
参数是什么?