如何将 markeredgecolor 设置为基于 pandas DataFrame 的颜色图
How to set markeredgecolor to a color map based off of a pandas DataFrame
我想用来自 DataFrame 的两组不同数据制作散点图,其中一组具有实心圆标记,另一组具有空心圆标记,但两者都由 DataFrame 中的另一列进行颜色编码。这个情节的代码是:
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']
,但这不起作用。 None 我见过的解决方案是用颜色条做空心标记。
你可以先用正常的方式画出散点图,然后设置facecolor为'none':
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()
在问题的代码中,它会是这样的:
scatterdots = plt.scatter(fullmergedf['ir_SFR-ladder_total'], fullmergedf['PAB_L'], s=200, c=fullmergedf['td_lmass'], cmap='coolwarm')
scatterdots.set_facecolor('none')
我想用来自 DataFrame 的两组不同数据制作散点图,其中一组具有实心圆标记,另一组具有空心圆标记,但两者都由 DataFrame 中的另一列进行颜色编码。这个情节的代码是:
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']
,但这不起作用。 None 我见过的解决方案是用颜色条做空心标记。
你可以先用正常的方式画出散点图,然后设置facecolor为'none':
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()
在问题的代码中,它会是这样的:
scatterdots = plt.scatter(fullmergedf['ir_SFR-ladder_total'], fullmergedf['PAB_L'], s=200, c=fullmergedf['td_lmass'], cmap='coolwarm')
scatterdots.set_facecolor('none')