Python 中心Seaborn色条标签
我看到的是离散数据,但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
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))?我在答案中添加了这个案例的解决方案。您需要更改词典和列表,但格式保持不变。