Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.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_Matplotlib_Seaborn - Fatal编程技术网

Python 中心Seaborn色条标签

Python 中心Seaborn色条标签,python,matplotlib,seaborn,Python,Matplotlib,Seaborn,我看到的是离散数据,但seaborn中的色条看起来只是为连续变量设置的 我的代码生成了我想要的图表,但是颜色栏上的标签与它们各自的颜色不一致 import pandas as pd import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline df = pd.DataFrame(np.random.randint(0,6,s

我看到的是离散数据,但seaborn中的色条看起来只是为连续变量设置的

我的代码生成了我想要的图表,但是颜色栏上的标签与它们各自的颜色不一致

import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

df = pd.DataFrame(np.random.randint(0,6,size=(52, 7)))
colors = {0:'#05926f', 1:'#99cc33', 2:'#F26419', 3:'#F6AE2D', 4:'#06AED5', 5:'#3baa5d'}
cmap = mpl.colors.ListedColormap(list(colors.values()))
fig, ax = plt.subplots(figsize=(3,8))
ax = sns.heatmap(df, annot=True, cmap=cmap, linewidths=.05)
plt.plot()
我尝试将
cbar_kws={“anchor”:(0.5,0.5)}
作为sns.heatmap调用的参数,但它抛出一个错误,表示它不喜欢anchor关键字。但是他们说我应该能够使用来自的论点,但是没有运气

我不知道如何将标签居中。我错过了什么明显的东西吗

如果有一个简单的解决方案,我还想将标签从
更改为
组-


谢谢大家!

您可能希望使用边界范数。问题是matplotlib不知道您希望哪个值对应于哪个颜色。要提供此信息,可以使用
BoundaryNorm
,指定颜色的bin边。在本例中,您将整数
0,1,2,3,4,5
作为值,您的箱子边最好选择为
-0.5,0.5,1.5,2.5,3.5,4.5,5.5
,以便这些值位于箱子的中心

import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
#%matplotlib inline

df = pd.DataFrame(np.random.randint(0,6,size=(52, 7)))
colors = {0:'#05926f', 1:'#99cc33', 2:'#F26419', 3:'#F6AE2D', 4:'#06AED5', 5:'#3baa5d'}

colorrange = range(len(list(colors.keys())))
colorlist = [colors[i] for i in colorrange]
cmap = mpl.colors.ListedColormap(colorlist)
bounds = np.array(range(len(list(colors.keys()))+1))-0.5
norm = mpl.colors.BoundaryNorm(bounds, len(colorrange))

fig, ax = plt.subplots(figsize=(4.2,8))
fig.subplots_adjust(right=0.8)
ax = sns.heatmap(df, annot=True, cmap=cmap, norm=norm, 
                 cbar_kws={'format': 'Group-%g'}, linewidths=.05)
plt.show()

当数据范围不是从0开始,但仍然是N个连续整数时的代码:
将熊猫作为pd导入
将numpy作为np导入
将matplotlib导入为mpl
将matplotlib.pyplot作为plt导入
导入seaborn作为sns
#%matplotlib内联
df=pd.DataFrame(np.random.randint(1,7,size=(52,7)))
颜色={6:#05926f',1:#99cc33',2:#F26419',3:#F6AE2D',4:#06AED5',5:#3baa5d'}
colorrange=已排序(列表(colors.keys()))
colorlist=[colorrange中i的颜色[i]
cmap=mpl.colors.ListedColormap(颜色列表)
bounds=np.数组(colorrange+[max(colorrange)+1])-0.5
norm=mpl.colors.BoundaryNorm(边界,len(颜色范围))
图,ax=plt.子批次(图尺寸=(4.2,8))
图子批次调整(右=0.8)
ax=sns.heatmap(df,annot=True,cmap=cmap,norm=norm,
cbar_kws={'format':'Group-%g'},线宽=.05)

plt.show()
“锚定”与颜色或标签无关,它是颜色栏的位置。除非你想改变立场,否则没有理由尝试使用这个论点。关于实际问题,您希望您的绘图看起来是什么样的?嗯。颜色条一侧的数字(本例中为0-6)针对连续数据对齐(即底部为0,顶部为6)。我希望这些数字直接居中在地图上它们所代表的颜色旁边。太好了!非常感谢你!对于“格式”:“组-%g”部分,如果组编号不是从0开始怎么办。e、 g.np.random.randint(1,7,size=(52,7))?我在答案中添加了这个案例的解决方案。您需要更改词典和列表,但格式保持不变。