Matplotlib绘图时计算值-Python3

时间:2018-08-17 11:41:45

标签: python-3.x matplotlib

我想在绘制图形时仅绘制正值(例如ML中的RELU函数)

这可能是一个愚蠢的问题。我希望不是。

在下面的代码中,我迭代并更改基础列表数据。我真的只想在绘图时间更改值,而不更改源列表数据。那可能吗?

#create two lists in range -10 to 10
x = list(range(-10, 11))
y = list(range(-10, 11))

#this function changes the underlying data to remove negative values
#I really want to do this at plot time
#I don't want to change the source list. Can it be done?
for idx, val in enumerate(y):
    y[idx] = max(0, val)

#a bunch of formatting to make the plot look nice
plt.figure(figsize=(6, 6))
plt.axhline(y=0, color='silver')
plt.axvline(x=0, color='silver')
plt.grid(True)

plt.plot(x, y, 'rx')

plt.show()

2 个答案:

答案 0 :(得分:2)

我建议在绘制时使用numpy并过滤数据:

import numpy as np
import matplotlib.pyplot as plt

#create two lists in range -10 to 10
x = list(range(-10, 11))
y = list(range(-10, 11))

x = np.array(x)
y = np.array(y)

#a bunch of formatting to make the plot look nice
plt.figure(figsize=(6, 6))
plt.axhline(y=0, color='silver')
plt.axvline(x=0, color='silver')
plt.grid(True)

# plot only those values where y is positive
plt.plot(x[y>0], y[y>0], 'rx')

plt.show()

这根本不会绘制y <0的点。相反,如果您想将任何负值替换为零,则可以按照以下步骤操作

plt.plot(x, np.maximum(0,y), 'rx')

答案 1 :(得分:0)

看似有点复杂,但可以动态过滤数据:

plt.plot(list(zip(*[(x1,y1) for (x1,y1) in zip(x,y) if x1>0])), 'rx')

说明:将数据成对处理以使(x,y)保持同步更加安全,然后必须将对转换回单独的xlist和ylist。