Маскировка для ограничения значений в Matplotlib - PullRequest
0 голосов
/ 23 февраля 2020

Я хочу ограничить ось X в зависимости от значения Y, такого как y <= 0 or y > 100 на графике, используя маску, как показано ниже.

Однако, это не работает так, как показано на рисунке ниже. Не могли бы вы дать мне несколько советов о том, где проблема в коде?

На самом деле, не имеет значения метод, такой как маска, если я могу построить только область видимости x для 'y <0'. </p>

Я использовал значение кадра данных CSV, используя pandas, и пропускал значения как предыдущее значение, используя df.ffill()

        df = pd.read_csv(file.csv)
        df1 = df.ffill()

        x = np.array(df1['A'])
        y = np.array(df1['B'])
        z = np.array(df1['C'])

        x_for_ax1 = np.ma.masked_where((y <= 0) | (y > 100), x)

        fig, (ax2, ax1) = plt.subplots(ncols=1, nrows=2)
        ax1.set_xlabel('X Axis')
        ax1.set_ylabel('Y Axis')
        ax2.set_ylabel('Z Axis')

        ax1.set_ylim([-10, 40])
        ax2.set_ylim([-5, 5])
        ax1.set_xlim([x_for_ax1.min(), x_for_ax1.max()])
        ax2.set_xlim([x_for_ax1.min(), x_for_ax1.max()])

        ax1.plot(x, y, color='k', linewidth=1)
        ax2.plot(x, z, color='k', linewidth=1)

        plt.show()

1 Ответ

1 голос
/ 23 февраля 2020

Не совсем ответ, просто попытался воссоздать вашу проблему:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(75, 145)
y = (np.sin((x/5)) + 1) * 10
y[:20] = 0
z = np.random.random(x.shape)
z[:20] = 0

x_for_ax1 = np.ma.masked_where((y <= 0) | (y > 100), x)

fig, (ax2, ax1) = plt.subplots(ncols=1, nrows=2)
ax1.set_ylim([-10, 40])
ax2.set_ylim([-5, 5])
ax1.set_xlim([x_for_ax1.min(), x_for_ax1.max()])  # Comment out 
ax2.set_xlim([x_for_ax1.min(), x_for_ax1.max()])  # for left image

ax1.plot(x, y, color='k', linewidth=1)
ax2.plot(x, z, color='k', linewidth=1)

Если я запустил этот код с некоторыми примерами данных, я получу правильную цифру. На левом рисунке я не устанавливаю пределы x:

rectangles With Limits

Не могли бы вы предоставить y, может быть, в нем есть NaN's в конце концов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...