2016-04-30 2 views
4

Я ищу способ в Python/Matplotlib/панд, чтобы создать цвет заполнение для графа, подобного этому (Источник: http://www.scminc.com/resources/SCM_TIPSTRICKS_Petrel_Well_Sections_2013_July14.pdf):Цвет заливается на основе значений?

enter image description here

Он использует цветовую карту для заливки (слева изображения) и на основе определенного интервала на оси x присваивает ему цвет. К сожалению, я не нашел решения, и поскольку я довольно новичок в Python в целом, я не могу найти способ сделать это.

Большое спасибо

+1

хорошо, если вы не абсолютно должны иметь диапазон цветов, которые вы могли бы использовать [fill_between] (http://matplotlib.org/examples/pylab_examples/fill_between_demo.html). В противном случае вам может понадобиться нечто вроде [коллекции патчей] (http://matplotlib.org/examples/api/patch_collection.html). Вы также можете рассмотреть возможность создания прямоугольного изображения и [обрезать его] (http://matplotlib.org/examples/images_contours_and_fields/image_demo_clip_path.html) с помощью патча. –

+0

.. продолжение предыдущего комментария ... для окончательного варианта вам понадобится [Патч Polygon] (http://matplotlib.org/api/patches_api.html#matplotlib.patches.Polygon). –

+0

'pcolor' также может работать для этого. – tacaswell

ответ

0

Вы можете участок заливки в качестве фона с imshow, а затем закрепить его. Вы можете использовать fill_betweenx, чтобы сделать маску.

Вот пример с использованием случайных данных:

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.patches import PathPatch 

# Make a random x and a y to go with it. 
np.random.seed(26) 
x = np.random.normal(0, 1, 200).cumsum() 
y = np.arange(x.size) 

# Set up the figure. 
fig, ax = plt.subplots(figsize=(2, 10)) 

# Make the background 'image'. 
im = ax.imshow(x.reshape(-1, 1), 
       aspect='auto', 
       origin='lower', 
       extent=[x.min(), x.max(), y.min(), y.max()] 
      ) 

# Draw the path. 
paths = ax.fill_betweenx(y, x, x.min(), 
         facecolor='none', 
         lw=2, 
         edgecolor='b', 
         ) 

# Make the 'fill' mask and clip the background image with it. 
patch = PathPatch(paths._paths[0], visible=False) 
ax.add_artist(patch) 
im.set_clip_path(patch) 

# Finish up. 
ax.invert_yaxis() 
plt.show() 

Это дает:

some random data filled with colour

Смежные вопросы