python - 将字符串数据传递给 matplotlib API 时会绘制什么?

# first, some imports:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

假设我想使用这些数据绘制散点图:

np.random.seed(42)
x=np.arange(0,50)
y=np.random.normal(loc=3000,scale=1,size=50)

绘图通过:

plt.scatter(x,y)

我得到这个答案:

好的,让我们先创建一个数据框:

df=pd.DataFrame.from_dict({'x':x,'y':y.astype(str)})

(我知道我将 y 存储为 str - 这是一个可重现的示例,我这样做是为了反射(reflect)真实的用例。)

然后,如果我这样做:

plt.scatter(df.x,df.y)

我得到:


我在第二个图中看到了什么?我认为第二个图必须显示 x 列与 y 列的对比, 转换为 float 。这显然不是这种情况。

最佳答案

Matplotlib 不会自动将 str 值转换为数值,因此您的 y 值被视为分类值。就 Matplotlib 而言,'1.0' 到 '0.9' 和 '1.0' 到 '100.0' 的差异没有区别。

因此,图上的 y 轴将与 range(len(y)) 相同(因为所有分类值之间的差异是相同的),并从分类值分配标签.

由于您的 x 是一个等于 range(50) 的范围,现在您的 y 也是一个范围(也等于 range(50)),它绘制 x = y,y 标签设置为相应的 str 值。

https://stackoverflow.com/questions/68873370/

相关文章:

python - Pandas:如何使用 json 数组分解数据框

awk - 使用 sed(或 awk 或 tr)将换行符\n 替换为表达式

amazon-web-services - AWS - 安全组是否足够或是否需要私有(private

ios - 在 SwiftUI 中更改 slider 拇指

algorithm - 给出了随机顺序的一串数字,你必须以十进制格式严格降序打印它们

ios - RNFIREBASE MESSENGER 不适用于 iOS,但适用于 Android

reactjs - React useEffect 钩子(Hook)没有清除间隔

java - 如何将带逗号的字符串转换为整数和 double

swift - GIDSignIn.sharedInstance : sharedInstance

c++ - 编译时 bool 值 C++ 未知的 constexpr 函数参数