python - 颜色填充两条曲线之间的区域 - 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()
生成的电流图如下所示:
解决方案
这绝对不是一个完美的方法,但它确实有效。只需在指定颜色的线上的两点之间绘制线。然后,您可以更改线条的宽度和线条的间距以“填充”它们之间的区域,同时保持足够好的分辨率。
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()
这给出了以下结果:
如果您只是在寻找视觉表示并且时间复杂度不是问题,那么这应该就可以了。
推荐阅读
- java - 它说我的导入有错误,但我不知道为什么
- c# - 如何通过 dapper 将 C# 对象模型作为类型传递给 postgresql 函数
- sql - PGSQL:匹配具有相同客户 ID 且相差 >90 天的行
- git - Git 命令 - 如何将代码从主分支获取到我的分支
- python - 使用to_csv时如何删除元组中的str“Pandas”和键名?
- android - 回收站视图 - 在空对象引用上
- qt - Qt 5.15.2 Q3D 对象拾取不适用于自定义几何
- javascript - 使用 Stripe 接受在线支付
- css - 是否可以将 box-shadow 用于 .header-main-wrap?
- python - 使用python连接kafka和elasticsearch