我目前有一個 X 值df["long"]和一個 Y 值df["lat"]。每個 X 和 Y 點代表一所房子,如果df["waterfront"]= 0 ,我希望散點顯示為藍色,如果df["waterfront"]= 1 ,則顯示為紅色。
我的嘗試如下所示,但我無法弄清楚如何插入標簽和圖例。
import pandas as pd
import matplotlib.pyplot as plt
d = {'long': [1, 2], 'lat': [3, 4], 'waterfront': [0, 1]}
df = pd.DataFrame(data=d)
colors = {0:'tab:blue', 1:'tab:red'}
plt.scatter(df['long'], df['lat'],
c=[colors[i] for i in df['waterfront']],
zorder=3, label=("Without Waterfront","With Waterfront"))
plt.xlabel ("Longitude")
plt.ylabel ("Latitude")
plt.title ("Longitude versus Latitude")
plt.grid(zorder=0)
plt.legend()
plt.show()
實際產量

預期產出

uj5u.com熱心網友回復:
您可以使用 seaborn 來簡單地執行此操作:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# data
d = {'long': [1, 2], 'lat': [3, 4], 'waterfront': [0, 1]}
df = pd.DataFrame(data=d)
# plot colors
colors = {0:'tab:blue', 1:'tab:red'}
# create scatter plot
g = sns.scatterplot(data=df, x="long", y="lat", hue="waterfront", palette=colors)
# set legend outside plot
g.legend(loc='center left', bbox_to_anchor=(1, 0.5), ncol=1)
# change legend labels
for t, l in zip(g.legend_.texts, ["Without Waterfront", "With Waterfront"]):
t.set_text(l)
# set labels and plot
plt.xlabel ("Longitude")
plt.ylabel ("Latitude")
plt.title ("Longitude versus Latitude")
plt.show()
輸出:

沒有seaborn的解決方案:
import pandas as pd
import matplotlib.pyplot as plt
# data
d = {'long': [1, 2], 'lat': [3, 4], 'waterfront': [0, 1]}
df = pd.DataFrame(data=d)
# create scatter plot
plt.scatter(df.loc[df['waterfront'] == 0,'long'], df.loc[df['waterfront'] == 0,'lat'],
color='tab:blue', label="Without Waterfront")
plt.scatter(df.loc[df['waterfront'] == 1,'long'], df.loc[df['waterfront'] == 1,'lat'],
color='tab:red', label="With Waterfront")
# set labels and plot
plt.xlabel ("Longitude")
plt.ylabel ("Latitude")
plt.title ("Longitude versus Latitude")
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), ncol=1)
plt.show()
輸出:

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/374569.html
標籤:matplotlib
上一篇:Matplotlib:多條柱狀圖
下一篇:在圖形的每個頂點上放置點(圖)
