【问题标题】:scatter plot with multiple X features and single Y in PythonPython中具有多个X特征和单个Y的散点图
【发布时间】:2019-12-02 14:26:47
【问题描述】:

表格中的数据:

       x1     x2
data= 2104,    3
      1600,    3
      2400,    3
      1416,    2
      3000,    4
      1985,    4

y= 399900
   329900
   369000
   232000
   539900
   299900

我想绘制具有 2 个 X 特征 {x1 和 x2} 和单个 Y 的散点图, 但是当我尝试时

y=data.loc[:'y']
px=data.loc[:,['x1','x2']]
plt.scatter(px,y)

我明白了:

'ValueError: x and y must be the same size'.

所以我尝试了这个:

data=pd.read_csv('ex1data2.txt',names=['x1','x2','y'])
px=data.loc[:,['x1','x2']]
x1=px['x1']
x2=px['x2']
y=data.loc[:'y']
plt.scatter(x1,x2,y)

这次我得到了一个空白图表,里面涂有全蓝色。 如果我得到一些指导,我会很充实

【问题讨论】:

  • 只要data.plot.scatter(y='y', x=['x1','x2'])
  • 我做到了,但是得到了同样的错误 'ValueError: x and y must be the same size' @QuangHoang
  • pairplots 是可视化多维数据的好方法:seaborn.pydata.org/generated/seaborn.pairplot.html

标签: python pandas matplotlib numpy-ndarray


【解决方案1】:

您只能使用一个 x 和几个 y 进行绘图。您可以在双轴上绘制不同的 x:

fig, ax = plt.subplots()
ay = ax.twiny()

ax.scatter(df['x1'], df['y'])
ay.scatter(df['x2'], df['y'], color='r')
plt.show()

输出:

【讨论】:

    【解决方案2】:

    您可以查看用于绘制数据框内容的 pandas 函数,它非常强大。

    但是如果你想使用matplotlib你可以查看文档(https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.scatter.html),据说X和Y必须是类数组。您正在传递一个列表。

    所以工作代码是这样的:

    data = pd.read_csv("test.txt", header=None)
    
    data
          0  1       2
    0  2104  3  399900
    1  1600  3  329900
    2  2400  3  369000
    3  1416  2  232000
    4  3000  4  539900
    5  1985  4  299900
    
    data.columns = ["x1", "x2", "y"]
    
    data
         x1  x2       y
    0  2104   3  399900
    1  1600   3  329900
    2  2400   3  369000
    3  1416   2  232000
    4  3000   4  539900
    5  1985   4  299900
    
    
    # If you call scatter many times and then plt.show() a single image is created
    plt.scatter(data["x1"], data["y"])
    plt.scatter(data["x2"], data["y"])
    plt.show()
    

    请注意,如果您想要数组格式的数据,您可以执行data["x1"].values,它将返回一个 ndarray。

    【讨论】:

    • Perfect =) 您能否将答案标记为正确?所以我获得了一点声誉
    【解决方案3】:

    您可以将 seaborn 与融化的数据框一起使用。 seaborn.scatterplot 有一个 hue 参数,允许包含多个数据系列。

    import seaborn as sns
    
    ax = sns.scatterplot(x='value', hue='series', y='y',
                         data=data.melt(value_vars=['x1', 'x2'], 
                                        id_vars='y',
                                        var_name='series'))
    

    但是,如果您的 x 值如此不同,您可能希望使用双轴,如@Quang Hoang 的回答。

    【讨论】:

      猜你喜欢
      • 2021-01-25
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      相关资源
      最近更新 更多