如何将MarkerEdge颜色设置为基于数据帧的颜色贴图

2024-05-16 13:14:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用一个数据框中的两组不同的数据做一个散点图,其中一组填充了圆标记,另一组填充了空心圆标记,但这两组数据都是由数据框中的另一列进行颜色编码的。我对该绘图的代码是:

    plt.figure(figsize = (10,10))
    plt.rcParams.update({'font.size': 30})
    plt.errorbar(fullmergedf['ir_SFR-UV_corr'] , fullmergedf['PAB_L'] , yerr = fullmergedf['PAB_L_ERR']  , linestyle = 'None' , c = 'grey' )
    plt.scatter(fullmergedf['ir_SFR-UV_corr'] , fullmergedf['PAB_L'] , s = 200 , c = fullmergedf['td_lmass'], cmap = 'coolwarm')
    plt.scatter(fullmergedf['ir_SFR-ladder_total'] , fullmergedf['PAB_L'] , s = 200 , c = fullmergedf['td_lmass'], cmap = 'coolwarm' , markerfacecolor = 'none')
    cb = plt.colorbar()
    cb.set_label('Log$[M_{\odot}]$')
    plt.ylabel("PaB L [erg/s]")
    plt.xlabel("UV + IR Ladder-SFR [$M_{\odot}/yr$]")
    plt.axis([min(fullmergedf['ir_SFR-ladder_total']) -10**-6 , max(fullmergedf['ir_SFR-ladder_total']) + 10**2 , min(fullmergedf['PAB_L']) - 10**36, max(fullmergedf['PAB_L'])  + 10**41])
    plt.xscale('log')
    plt.yscale('log')
    plt.show()

我试图将第二个plt.scatter()中的c = fullmergedf['td_lmass']更改为markeredgecolor = fullmergedf['td_lmass'],但这不起作用。我所见过的解决方案中没有一个是用色条做空心标记的


Tags: 数据标记irpltuvtdtotalsfr
1条回答
网友
1楼 · 发布于 2024-05-16 13:14:56

您可以先以正常方式创建散点图,然后将facecolor设置为“无”:

import numpy as np
import matplotlib.pyplot as plt

plt.scatter(np.random.rand(10), np.random.rand(10), s=200, c=np.linspace(0, 1, 10), cmap='Reds')
scatterdots = plt.scatter(np.random.rand(10), np.random.rand(10), s=200, c=np.linspace(0, 1, 10), cmap='Greens', lw=3)
scatterdots.set_facecolor('none')
plt.show()

resulting plot

在问题的代码中,它类似于:

scatterdots = plt.scatter(fullmergedf['ir_SFR-ladder_total'], fullmergedf['PAB_L'], s=200, c=fullmergedf['td_lmass'], cmap='coolwarm')
scatterdots.set_facecolor('none')    

相关问题 更多 >