2016-12-26 3 views
0

х Stacked черчения в Matplotlib с равным x данных так же легко, какstackplot с различными данными

from matplotlib import pyplot as plt 

x0 = [0.0, 0.5, 2.0] 
y0 = [1.0, 1.5, 1.0] 

# x1 = [0.0, 1.5, 2.0] 
y1 = [1.0, 1.5, 1.0] 

plt.stackplot(x0, (y0, y1)) 
plt.show() 

Можно ли сложить два участка с слишком различныеx данные?

ответ

1

Это не представляется возможным. Если вы посмотрите на code for Matplotlib's stackplot, то это та часть, которая рисует сам сюжет: сложены

# Color between array i-1 and array i 
for i in xrange(len(y) - 1): 
    color = axes._get_lines.get_next_color() 
    r.append(axes.fill_between(x, stack[i, :], stack[i + 1, :], 
           facecolor=color, 
           label= six.next(labels, None), 
           **kwargs)) 

Так что всегда будет использовать тот же x для всех стеков.

С другой стороны, вы можете создать новый массив x для сложного графика и включить все значения из всех разных массивов x, а затем вычислить недостающие значения y стека, используя линейную интерполяцию.

Возможное решение с использованием интерполяции может выглядеть следующим образом:

from matplotlib import pyplot as plt 

def interp_nans(x, y): 
    is_nan = np.isnan(y) 
    res = y * 1.0 
    res[is_nan] = np.interp(x[is_nan], x[-is_nan], y[-is_nan]) 
    return res 

x = np.array([0.0, 0.5, 1.5, 2.0]) 

y0 = np.array([1.0, 1.5, np.nan, 1.0]) 
y1 = np.array([1.0, np.nan, 1.5, 1.0]) 

plt.stackplot(x, (interp_nans(x, y0), interp_nans(x, y1))) 
plt.show() 

Но если интерполяция не может быть использована в данном случае, то он не будет работать.

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