亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Seaborn 散點圖圖例顯示真實值和標準化連續顏色

Seaborn 散點圖圖例顯示真實值和標準化連續顏色

米琪卡哇伊 2022-06-28 10:40:17
我有一個數據框,我想用它來構建一個散點圖,其中不同的點有不同的顏色:import numpy as npimport seaborn as snsimport 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))如您所見,該列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)問題:- 如何根據值生成連續圖例?- 如何調整其刻度以顯示原始刻度c,或至少顯示一個min、、max和mean或median?提前致謝
查看完整描述

1 回答

?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

部分回答。你真的需要根據規范值來確定你的標記顏色嗎?請參閱下面代碼段的輸出。


import numpy as np

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))

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()

http://img1.sycdn.imooc.com//62ba6a44000116f513590844.jpg

您絕對可以修改第二個顏色條,使其與第一個顏色條匹配,但有必要嗎?



查看完整回答
反對 回復 2022-06-28
  • 1 回答
  • 0 關注
  • 225 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號