首页 > 解决方案 > 颜色填充两条曲线之间的区域 - Python

问题描述

如何填充两条曲线之间的颜色?我想用一种颜色填充由水平线上方的曲线界定的区域,并用第二种不同的颜色填充由水平线下方的曲线界定的区域。

random_x = [-180, -160, -140, -100, -70, -40, -10, 20, 50, 80, 110, 120, 140, 165,175, 180]
random_y = [2000000, 700000, 2800000, 4200000, 1000000, 1200000, 3500000, 2000000, 800000, 3900000, 2500000, 1000000,3400000,2400000,2100000, 2000000]

interp1d_cubic = interp1d(random_x, random_y, kind='cubic')
x3 = np.linspace(-180, 180, 100000)
plt.plot(x3, interp1d_cubic(x3), c='k')
y_coord = np.linspace(980000,980000,100000)
plt.plot(x3, y_coord, c='k', linestyle='--')
plt.show()

生成的电流图如下所示:

在此处输入图像描述

标签: pythonmatplotlibgraphicscolorscurve

解决方案


这绝对不是一个完美的方法,但它确实有效。只需在指定颜色的线上的两点之间绘制线。然后,您可以更改线条的宽度和线条的间距以“填充”它们之间的区域,同时保持足够好的分辨率。

import matplotlib.pyplot as plt
from scipy.interpolate import interp1d
import numpy as np

random_x = [-180, -160, -140, -100, -70, -40, -10, 20, 50, 80, 110, 120, 140, 165,175, 180]
random_y = [2000000, 700000, 2800000, 4200000, 1000000, 1200000, 3500000, 2000000, 800000, 3900000, 2500000, 1000000,3400000,2400000,2100000, 2000000]

interp1d_cubic = interp1d(random_x, random_y, kind='cubic')
x3 = np.linspace(-180, 180, 100000)
plt.plot(x3, interp1d_cubic(x3), c='k')
y_coord = np.linspace(980000,980000,100000)
plt.plot(x3, y_coord, c='k', linestyle='--')

# Variable names changed for convenience
y1 = interp1d_cubic(x3)
y2 = y_coord
x = x3
# With default linewidth, plotting a line at every
# 200th point was just fine
for i in range(0,len(x3),200):
    if y1[i] > y2[i]:
        c = 'r'
    else:
        c = 'b'
    plt.plot([x[i],x[i]], [y1[i], y2[i]], color = c, zorder=0)

plt.show()

这给出了以下结果:

在此处输入图像描述

如果您只是在寻找视觉表示并且时间复杂度不是问题,那么这应该就可以了。


推荐阅读