【问题标题】:Color fill the area between two curves - Python [duplicate]颜色填充两条曲线之间的区域 - Python [重复]
【发布时间】:2020-06-30 09:38:59
【问题描述】:

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

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

生成的当前图如下所示:

【问题讨论】:

  • 严格来说这不是同一个任务。在较旧的答案中,它是关于在 3 行之间填充,但每对只有一种颜色。在这个上,要求用不同的颜色填充一对。有一种方法: ... y_inter = interp1d_cubic(x3) # 不要一直调用它 plt.plot(x3, y_inter, c='k') ... plt.fill_between(x3,y_coord, y_inter, where = y_coord > y_inter, color = "blue") plt.fill_between(x3,y_coord,y_inter, where = y_coord

标签: python matplotlib graphics colors curve


【解决方案1】:

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

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

结果如下:

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

【讨论】:

    猜你喜欢
    • 2021-05-07
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多