我想用matplotlib中的一个数组值来给双对数图着色。这个数组值的形状与所绘制的数据形状相同。我想下面的例子可以很好地说明我的想法。
以下是相同的概念,但使用plt.scatter函数绘制:
y = np.empty([40, 2])
y[:, 0] = np.arange(40)
y[:,1] = y[:,0]**2
color = y[:,1]**3
plt.figure()
plt.scatter(y[:, 0], y[:,1], c=color, cmap='OrRd', norm=mpl.colors.LogNorm())
plt.xscale('log')
plt.yscale('log')
plt.colorbar()
以上代码的输出如下图所示:
但是,如果我使用plt.loglog
函数而不是plt.scatter
运行相同的代码,则会出现以下错误:
ValueError: array([0.00000000e+00, 1.00000000e+00, 6.40000000e+01, 7.29000000e+02,
4.09600000e+03, 1.56250000e+04, 4.66560000e+04, 1.17649000e+05,
2.62144000e+05, 5.31441000e+05, 1.00000000e+06, 1.77156100e+06,
2.98598400e+06, 4.82680900e+06, 7.52953600e+06, 1.13906250e+07,
1.67772160e+07, 2.41375690e+07, 3.40122240e+07, 4.70458810e+07,
6.40000000e+07, 8.57661210e+07, 1.13379904e+08, 1.48035889e+08,
1.91102976e+08, 2.44140625e+08, 3.08915776e+08, 3.87420489e+08,
4.81890304e+08, 5.94823321e+08, 7.29000000e+08, 8.87503681e+08,
1.07374182e+09, 1.29146797e+09, 1.54480442e+09, 1.83826562e+09,
2.17678234e+09, 2.56572641e+09, 3.01093638e+09, 3.51874376e+09]) is not a valid value for color
我知道这意味着由于某种原因,我们不能使用向量通过plt. loglog对线进行着色。是否有解决方法,以便在双对数图中,沿着线连续更改颜色?
谢谢你!
1条答案
按热度按时间gab6jxml1#
这类操作(操作曲线的各个分段)通常使用
matplotlib.collections.LineCollection
示例来完成(另请参见the examples)。代码已注解,但如果您需要进一步解释,请在答案下注解,我会得到通知。