Python matplotlib:使用对数颜色条值为二维线着色,用于为散点图着色
我需要给一条线上色,该线连接一个由第三个变量上色的散点图(第三个变量对于所有散点都是相同的;最后我将有多个具有不同第三个变量的散点图)。我需要线的颜色来匹配散射点,颜色条需要对数缩放。我在提取RGBA日志规范化值时遇到问题,该值用于为散射点着色,以便根据该值为线着色。示例如下:Python matplotlib:使用对数颜色条值为二维线着色,用于为散点图着色,python,matplotlib,Python,Matplotlib,我需要给一条线上色,该线连接一个由第三个变量上色的散点图(第三个变量对于所有散点都是相同的;最后我将有多个具有不同第三个变量的散点图)。我需要线的颜色来匹配散射点,颜色条需要对数缩放。我在提取RGBA日志规范化值时遇到问题,该值用于为散射点着色,以便根据该值为线着色。示例如下: import matplotlib.pyplot as plt import numpy as np import matplotlib as mpl color = plt.get_cmap('Blues') #F
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
color = plt.get_cmap('Blues')
#Fake data
a = np.arange(0,10,1)
b = np.arange(10,20,1)
d = [100]*10
maxval=1000.0
minval=10.0
#Normalize array to limits of colorbar
l=d[1]
normalized= (l/(maxval-minval))
#Check if Nan (I have some NaN's).
#Returns the colormap value
check = np.isnan(np.sum(normalized))
cmapvalue=[]
if check==True:
cmapvalue=g
else:
cmapvalue=color(normalized)
#Plot scatter and line, line needs to be colored by RGBA value used to color scatter points
plt.scatter(a, b, c=d, cmap=color, norm=mpl.colors.LogNorm(vmax=maxval, vmin=minval), zorder=2, s=50)
plt.plot(a,b, c=cmapvalue, zorder=1, lw=4)
plt.colorbar()
plt.show()
任何帮助都将不胜感激,因此问题在于,您需要(手动)线性调整您的值。但在“分散”的调用中,您通过了对数缩放类。您可以直接使用它来规范化绘图调用的值,而不只是传递它:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
#Fake data
a = np.arange(0,10,1)
b = np.arange(10,20,1)
d = [50]*10
# define vmin and vmax
maxval=1000.0
minval=10.0
# build up colormap and normalizer
colormap = plt.get_cmap('Blues')
norm = mpl.colors.LogNorm(vmax=maxval, vmin=minval)
# helper function to plot the line and the scatter data
def plot_my_scatterdata(x, y, d):
if np.any(np.isnan(d)):
color = 'g'
else:
# use the colormap and the normalization instance!
color = colormap(norm(d[0]))
plt.scatter(a, b, c=d, cmap=colormap, norm=norm, zorder=2, s=50)
plt.plot(a,b, '-', color=color, zorder=1, lw=4)
plot_my_scatterdata(a, b, d)
d = [100]*10
b += 1
plot_my_scatterdata(a, b, d)
d = [500]*10
b += 1
plot_my_scatterdata(a, b, d)
d[0] = np.nan
b += 1
plot_my_scatterdata(a, b, d)
plt.colorbar()
plt.show()
结果:
请您也提供
d
?或提供适当的替代品?更新为d。。。道歉