Seaborn 散点图图例显示真实值和标准化连续颜色

我有一个数据框,我想用它来构建一个散点图,其中不同的点有不同的颜色:


import numpy as np

import seaborn as sns

import matplotlib.pyplot as plt

import pandas as pd


dat=pd.DataFrame(np.random.rand(20, 2), columns=['x','y'])

dat['c']=np.random.randint(0,100,20)

dat['c_norm']=(dat['c']-dat['c'].min())/(dat['c'].max()-dat['c'].min())

dat['group']=np.append(np.repeat('high',10), np.repeat('low',10))

http://img.mukewang.com/62ba6a26000197bb02910573.jpg

如您所见,该列c_norm显示该c列已在 0 和 1 之间标准化。我想显示一个连续图例,其颜色范围反映标准化值,但使用原始c值作为标签进行标记。比如说,最小值 ( 1)、最大值 ( 86) 和中值 ( 49)。我还希望根据group.


到目前为止,我能够做到这一点:


fig = plt.figure(figsize = (8,8))

ax = fig.add_subplot(1,1,1) 


for row in dat.index:

    if(dat.loc[row,'group']=='low'):

        i_marker='.'

    else:

        i_marker='x'


    ax.scatter(

        x=dat.loc[row,'x'],

        y=dat.loc[row,'y'],

        s=50, alpha=0.5,

        marker=i_marker

    )

    ax.legend(dat['c_norm'], loc='center right', bbox_to_anchor=(1.5, 0.5), ncol=1)

http://img4.mukewang.com/62ba6a33000109de07010460.jpg

问题:
- 如何根据值生成连续图例?- 如何调整其刻度以显示原始刻度c,或至少显示一个min、、maxmeanmedian

提前致谢


米琪卡哇伊
浏览 197回答 1
1回答

Smart猫小萌

部分回答。你真的需要根据规范值来确定你的标记颜色吗?请参阅下面代码段的输出。import numpy as npimport matplotlib.pyplot as pltimport pandas as pddat = pd.DataFrame(np.random.rand(20, 2), columns=['x', 'y'])dat['c'] = np.random.randint(0, 100, 20)dat['c_norm'] = (dat['c'] - dat['c'].min()) / (dat['c'].max() - dat['c'].min())dat['group'] = np.append(np.repeat('high', 10), np.repeat('low', 10))fig, (ax, bx) = plt.subplots(nrows=1, ncols=2, num=0, figsize=(16, 8))mask = dat['group'] == 'low'scat = ax.scatter(dat['x'][mask], dat['y'][mask], s=50, c=dat['c'][mask],                  marker='s', vmin=np.amin(dat['c']), vmax=np.amax(dat['c']),                  cmap='plasma')ax.scatter(dat['x'][~mask], dat['y'][~mask], s=50, c=dat['c'][~mask],           marker='X', vmin=np.amin(dat['c']), vmax=np.amax(dat['c']),           cmap='plasma')cbar = fig.colorbar(scat, ax=ax)scat = bx.scatter(dat['x'][mask], dat['y'][mask], s=50, c=dat['c_norm'][mask],                  marker='s', vmin=np.amin(dat['c_norm']),                  vmax=np.amax(dat['c_norm']), cmap='plasma')bx.scatter(dat['x'][~mask], dat['y'][~mask], s=50, c=dat['c_norm'][~mask],           marker='X', vmin=np.amin(dat['c_norm']),           vmax=np.amax(dat['c_norm']), cmap='plasma')cbar2 = fig.colorbar(scat, ax=bx)plt.show()您绝对可以修改第二个颜色条,使其与第一个颜色条匹配,但有必要吗?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python