如何在一行中写一个 plt.scatter(x, y) 函数,其中 y=x 的函数
How to Write a plt.scatter(x, y) function in one line where y=function of x
我正在绘制散点图以显示数据框中的空值。如您所见,plt.scatter() 函数的表现力不够。 list(range(0,1200)) 和 'a' 之间的关系不清楚,除非您看到前面几行。 plt.scatter(x,y) 能否以更明确的方式编写,以便轻松理解 x 和 y 之间的关系。就像如果有人只看到 plt.scatter(x,y) ,他们就会明白它是关于什么的。
a = []
for i in range(0,1200):
feature_with_na = [feature for feature in df.columns if df[feature].isnull().sum()>i]
a.append(len(feature_with_na))
plt.scatter(list(range(0,1200)), a)
在您的 x 轴上有数字,然后在 y 轴上您想要绘制 DataFrame 中具有超过该空值数的列数。
您可以计算每列中空值的数量,并使用 numpy.broadcasting
、([:, None]
) 来与您的数字数组进行比较,而不是循环。这允许您指定数字的 xarr
,然后在比较中使用相同的数组。
示例数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plot
df = pd.DataFrame(np.random.choice([1,2,3,4,5,np.NaN], (100,10)))
代码
# Range of 'x' values to consider
xarr = np.arange(0, 100)
plt.scatter(xarr, (df.isnull().sum().to_numpy()>xarr[:, None]).sum(axis=1))
ALollz 的回答很好,但如果你喜欢的话,这里有一个不那么笨重的选择:
feature_null_counts = df.isnull().sum()
n_nulls = list(range(100))
features_with_n_nulls = [sum(feature_null_counts > n) for n in n_nulls]
plt.scatter(n_nulls, features_with_n_nulls)
我正在绘制散点图以显示数据框中的空值。如您所见,plt.scatter() 函数的表现力不够。 list(range(0,1200)) 和 'a' 之间的关系不清楚,除非您看到前面几行。 plt.scatter(x,y) 能否以更明确的方式编写,以便轻松理解 x 和 y 之间的关系。就像如果有人只看到 plt.scatter(x,y) ,他们就会明白它是关于什么的。
a = []
for i in range(0,1200):
feature_with_na = [feature for feature in df.columns if df[feature].isnull().sum()>i]
a.append(len(feature_with_na))
plt.scatter(list(range(0,1200)), a)
在您的 x 轴上有数字,然后在 y 轴上您想要绘制 DataFrame 中具有超过该空值数的列数。
您可以计算每列中空值的数量,并使用 numpy.broadcasting
、([:, None]
) 来与您的数字数组进行比较,而不是循环。这允许您指定数字的 xarr
,然后在比较中使用相同的数组。
示例数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plot
df = pd.DataFrame(np.random.choice([1,2,3,4,5,np.NaN], (100,10)))
代码
# Range of 'x' values to consider
xarr = np.arange(0, 100)
plt.scatter(xarr, (df.isnull().sum().to_numpy()>xarr[:, None]).sum(axis=1))
ALollz 的回答很好,但如果你喜欢的话,这里有一个不那么笨重的选择:
feature_null_counts = df.isnull().sum()
n_nulls = list(range(100))
features_with_n_nulls = [sum(feature_null_counts > n) for n in n_nulls]
plt.scatter(n_nulls, features_with_n_nulls)