屏蔽以限制 Matplotlib 中的值
Masking to limit the values in Matplotlib
我想根据 Y 值限制 X 轴,例如 y <= 0 or y > 100
在使用掩码绘制图形时,如下所示。
然而,它并没有像下图那样很好地工作。你能给我一些关于代码中问题出在哪里的建议吗?
实际上,如果我可以为 'y < 0' 绘制 x 的范围,那么掩码等方法并不重要。
我使用 pandas 使用 CSV 数据帧值,并使用 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()
不是真正的答案,只是试图重现您的问题:
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 限制:
能不能提供一下y
,说不定里面还有NaN's
呢?
我想根据 Y 值限制 X 轴,例如 y <= 0 or y > 100
在使用掩码绘制图形时,如下所示。
然而,它并没有像下图那样很好地工作。你能给我一些关于代码中问题出在哪里的建议吗?
实际上,如果我可以为 'y < 0' 绘制 x 的范围,那么掩码等方法并不重要。
我使用 pandas 使用 CSV 数据帧值,并使用 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()
不是真正的答案,只是试图重现您的问题:
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 限制:
能不能提供一下y
,说不定里面还有NaN's
呢?