gpt4 book ai didi

python - pandas.plot 参数 c vs s

转载 作者:行者123 更新时间:2023-11-28 21:35:17 30 4
gpt4 key购买 nike

我有以下机器学习书中的 python 代码:

copy_set.plot(kind = "scatter" , x = "longitude" , 
y = "latitude" , alpha = 0.4 ,
s = copy_set[ "population" ],
label = "population" , figsize=(10,7),
c = "median_house_value" , cmap = plt.get_cmap ( "jet" ) )

median_house_valuepopulationcopy_set 数据框中的两列。我不明白为什么对于参数 s 我必须使用 copy_set['population'] 但对于参数 c 可以只使用列名 median_house_value。当我尝试仅将列名用于参数 s 时,我收到一条错误消息:

TypeError: ufunc 'sqrt' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

最佳答案

很好的问题。 df.plot 是几个 matplotlib 绘图函数的包装器。对于 kind="scatter" matplotlib 的 scatter 函数将被调用。 df.plot() 的大部分参数首先转换为 Series 中的数据,您从数据帧的相应名称的列中获取这些数据。

例如

df.plot(x="lon", y="lat")

将转换为

ax.scatter(x=df["lon"].values, y=df["lat"].values)

剩下的参数通过分散,因此

df.plot(x="lon", y="lat", some_argument_pandas_doesnt_know=True)

将导致

ax.scatter(x=df["lon"].values, y=df["lat"].values, some_argument_pandas_doesnt_know=True)

因此,当 pandas 转换参数 xyc 时,它不会为 ss 因此简单地传递给 ax.scatter,但是 matplotlib 函数不知道像 "population" 这样的字符串是什么意思。
对于传递给 matplotlib 函数的参数,需要坚持 matplotlib 的签名,在 s 的情况下直接提供数据。

但是请注意,matplotlib 的 scatter 本身也允许使用字符串作为其参数。然而,这需要告诉它应该从哪个数据集中获取它们。这是通过 data 参数完成的。因此以下工作正常并且将是 matplotlib 等同于问题中的 pandas 调用:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np; np.random.seed(42)

df = pd.DataFrame(np.random.rand(20,2), columns=["lon", "lat"])
df["pop"] = np.random.randint(5,300,size=20)
df["med"] = np.random.rand(20)*1e5

fig, ax = plt.subplots(figsize=(10,7))
sc = ax.scatter(x = "lon", y = "lat", alpha = 0.4,
s = "pop", label = "population" ,
c = "med" , cmap = "jet", data=df)
fig.colorbar(sc, label="med")
ax.set(xlabel="longitude", ylabel="latitude")

plt.show()

最后,您现在可能会问,通过 data 参数向 matplotlib 提供数据是否不能通过 pandas 包装器传递。不幸的是,因为 pandas 在内部使用 data 作为参数,所以它不会被传递。因此,您的两个选择是:

  1. 在问题中使用 pandas 并通过 s 参数而不是列名提供数据本身。
  2. 如此处所示使用 matplotlib,并为所有参数使用列名。 (或者使用数据本身,这是您在查看 matplotlib 代码时最常看到的。)

关于python - pandas.plot 参数 c vs s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52412449/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com