如何在同一绘图中绘制具有完全不同含义的多个列

2024-10-02 06:27:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据。如何将每个街区的三列(dist、price和count)绘制在一起

t1 = pd.DataFrame({'neighbourhood': ['Allston-Brighton', 'Back Bay', 'Beacon Hill', 'Brookline', 'Cambridge'], 
                   'dist': [5.318724014750601, 0.3170049667872781, 1.2481192434918875, 4.122402023894361, 2.975557190604119],
                   'price':[130.39048767089844, 276.3820495605469, 231.87042236328125, 127.90569305419922, 195.94696044921875],
                  'count':[238, 239, 135, 7, 7]})


    neighbourhood       dist        price       count
0   Allston-Brighton    5.318724    130.390488  238
1   Back Bay            0.317005    276.382050  239
2   Beacon Hill         1.248119    231.870422  135
3   Brookline           4.122402    127.905693  7
4   Cambridge           2.975557    195.946960  7

你对matplotlib或seaborn有什么建议吗?谢谢大家!


Tags: 数据distcountback绘制pricet1cambridge
1条回答
网友
1楼 · 发布于 2024-10-02 06:27:12

您需要的是分组条形图。您可以融化数据帧,它以长格式重新格式化数据帧,即每一个邻域和每行一次一个变量。然后将seaborns条形图应用于此融化的数据帧

更新:由于y值相距很远,我们可以添加一些标签。这是一种变通方法,它遍历每一行,并将标签附加到相应的栏中。您添加到x和y的值只是通过反复试验得到的

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

t1 = pd.DataFrame({'neighbourhood': ['Allston-Brighton', 'Back Bay', 'Beacon Hill', 'Brookline', 'Cambridge'], 
                   'dist': [5.318724014750601, 0.3170049667872781, 1.2481192434918875, 4.122402023894361, 2.975557190604119],
                   'price':[130.39048767089844, 276.3820495605469, 231.87042236328125, 127.90569305419922, 195.94696044921875],
                  'count':[238, 239, 135, 7, 7]})

t1_melted = pd.melt(t1, id_vars="neighbourhood", var_name="source", value_name="value_numbers")
g = sns.barplot(x="neighbourhood", y="value_numbers", hue="source", data=t1_melted)

for index, row in t1.iterrows():
     g.text(row.name - 0.35, row.dist + 0.1, round(row.dist, 2), color='black')

plt.show()

enter image description here

相关问题 更多 >

    热门问题