matplotlib:通过用于为散点图着色的对数颜色条值对 2D 线进行着色

Posted

技术标签:

【中文标题】matplotlib:通过用于为散点图着色的对数颜色条值对 2D 线进行着色【英文标题】:matplotlib: Color 2D line by logarithmic colorbar value used to color scatterplot 【发布时间】:2015-07-09 16:02:31 【问题描述】:

我需要为一条线着色,该线连接由第三个变量着色的散点图(第三个变量对于所有散点点都是相同的;最后我将有多个散点图和不同的第三个变量)。我需要线条的颜色来匹配散点,并且颜色条需要进行对数缩放。我无法提取用于为散点着色的 RGBA 对数归一化值,以便按该值对线进行着色。示例如下:

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

任何帮助将不胜感激

【问题讨论】:

能否请您也提供d?或者提供合适的替代品? 已更新...道歉 【参考方案1】:

所以问题是您线性地(手动)缩放您的值。但是在 scatter 调用中,您传递了一个对数缩放类。您可以直接使用它来规范化调用 plot 的值,而不仅仅是传递它:

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

结果:

【讨论】:

以上是关于matplotlib:通过用于为散点图着色的对数颜色条值对 2D 线进行着色的主要内容,如果未能解决你的问题,请参考以下文章

带有 ggplot2 的散点图按 r 中的特定日期间隔着色

Matplotlib可视化散点图配置X轴为对数坐标并使用线条(line)连接散点图中的数据点(Simple Line Plot with Data points in Matplotlib)

Matplotlib 散点图;颜色作为第三个变量的函数

seaborn使用jointplot函数为散点图添加边缘图为散点图添加边缘直方图(Marginal Plot in Python with Seaborn jointplot)

Matplotlib可视化散点图配置X轴为对数坐标并使用线条(line)连接散点图中的数据点基于分组变量配置数据点的颜色(connecting two coordinates with line

为散点图添加图例