【问题标题】:Seaborn | Matplotlib: Scatter plot: 3rd variable is encoded by both size and colour海伯恩 | Matplotlib:散点图:第三个变量由大小和颜色编码
【发布时间】:2021-05-31 00:31:51
【问题描述】:

我想创建一个图,显示夜间价格的地理分布,使用经度和纬度作为坐标,价格由圆圈的颜色和大小编码。我目前不知道如何通过颜色和大小的价格对地块进行编码。我是来找你的~这个场景下seaborn的文档看不懂。

感兴趣的 3 列:

longtitude     lattitude     Price

50.1235156     4.1236436     160
52.3697862     4.8935462     300
52.3640489     4.8895343     8000
52.3729765     4.8931707     1300
52.3657530     4.8796741     5000
52.2957663     4.3058365     60
52.6709324     4.6028347     100

在我的场景中:每列长度相等,但我只想包含>150的价格

我被这个过滤器卡住了,因为应用过滤器的列的大小是longitudelatitude 的一半。

我毫无头绪的尝试:

plt.scatter(df.longitude, df.latitude, s=(df.price)>150, c= (df.price)>150)

我理解的方式是纬度和经度创建空间/平面,然后应用价格数据。但是实现它的工作方式似乎有所不同?

【问题讨论】:

    标签: python matplotlib seaborn


    【解决方案1】:

    首先,您需要在绘图前过滤数据框。如果你做你正在做的事情(无论如何都不会工作),你的 x 和 y 坐标系列将是数据帧的整个长度,但负责颜色编码和大小的系列会更短,因为你试图过滤掉 150 以下的值:s=(df.price)>150

    其次,您不能使用 matplotlib 进行这样的绘图。使用 matplotlib 对点进行颜色编码,您需要创建一个字典,因此为了简单起见,我建议使用 seaborn。

    import seaborn as sns
    import pandas as pd
    
    import matplotlib.pyplot as plt
    
    df_plot = df.loc[df.price > 150]
    
    fig = sns.scatterplot(data=df_plot, x='longitude', y='latitude', size='price', hue='price')
    plt.show()
    

    【讨论】:

    • 感谢您的输入,尽管我收到以下错误 AttributeError: 'int' object has no attribute 'view' 假设 data=df.plotdata=df_plot 的错字 您的 cmets 确实很有意义,我完全理解df.
    • @DropKick,是的,这是一个错字,抱歉。你能从你得到的错误中显示回溯吗?我不确定view 可能来自哪里。
    • df2 = df[['longitude', 'latitude', 'price']] df_Scatter = df2[df2['price']>150] fig = sns.scatterplot(data=df_Scatter, x='longitude', y='latitude', size = 'price', hue ='price') plt.show() 散点图线上的属性错误
    猜你喜欢
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多