Как установить 'y> 0' формулу в set_xlim matplotlib? - PullRequest
1 голос
/ 21 февраля 2020

Я хочу установить диапазон x в соответствии со значением y на графике, например y> 0, но я не уверен, как установить этот. Не могли бы вы дать мне знать, как установить его?

df = pd.read_csv(file.csv)
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)

# range of ax1.set_xlim and ax1.set_xlim is same. 
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()])

1 Ответ

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

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

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

В демонстрационных целях в примере создается кадр данных из некоторых фиктивных данных.

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

a = np.linspace(-1, 4, 500)
b = np.sin(a) * 100
c = np.cos(a) * 150
df = pd.DataFrame({'A': a, 'B': b, 'C': c})
x = np.array(df['A'])
y = np.array(df['B'])
z = np.array(df['C'])

fig, ((ax1, ax3),(ax2, ax4)) = plt.subplots(ncols=2, nrows=2)

ax1.set_xlabel('x')
ax2.set_xlabel('x')
ax3.set_xlabel('x')
ax4.set_xlabel('x')
ax1.set_ylabel('y')
ax3.set_ylabel('y')
ax2.set_ylabel('z')
ax4.set_ylabel('z')

ymin = 1
ymax = 100
zmin = 1
zmax = 150
x_for_ax1 = np.ma.masked_where(((y < ymin) | (y > ymax)) & ((z < zmin) | (z > zmax)), x)
x_for_ax3 = np.ma.masked_where((y < ymin) | (y > ymax), x)
x_for_ax4 = np.ma.masked_where((z < zmin) | (z > zmax), x)

ax1.plot(x, y)
ax3.plot(x, y)
ax1.set_ylim([ymin, ymax])
ax3.set_ylim([ymin, ymax])

ax2.plot(x, z)
ax4.plot(x, z)
ax2.set_ylim([zmin, zmax])
ax4.set_ylim([zmin, zmax])

ax1.set_xlim([x_for_ax1.min(), x_for_ax1.max()])
ax2.set_xlim([x_for_ax1.min(), x_for_ax1.max()])
ax1.set_title('x limited to y and z range')
ax2.set_title('x limited to y and z range')

ax3.set_xlim([x_for_ax3.min(), x_for_ax3.max()])
ax3.set_title('x limited to y range')

ax4.set_xlim([x_for_ax4.min(), x_for_ax4.max()])
ax4.set_title('x limited to z range')

plt.tight_layout(w_pad=1)
plt.show()

example plot

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