Matplotlib:向散点图添加颜色图例
Matplotlib: Add color legend to scatter plot
有table为:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
list_1=[['AU',152,474.0],
['CA',440,482.0],
['DE',250,564.0,],
['ES',707,549.0,],
['FR',1435,551.0,],
['GB',731,555.0,],
['IT',979,600.0,],
['NDF',45041,357.0,],
['NL',247,542.0,],
['PT',83,462.0,],
['US',20095,513.0,],
['other',3655,526.0,]]
labels=['country_destination','num_users','avg_hours_spend']
df=pd.DataFrame(list_1,columns=labels)
df=df.set_index('country_destination')
df
country_destination num_users avg_hours_spend
AU 152 474.0
CA 440 482.0
DE 250 564.0
ES 707 549.0
FR 1435 551.0
GB 731 555.0
IT 979 600.0
NDF 45041 357.0
NL 247 542.0
PT 83 462.0
US 20095 513.0
other 3655 526.0
我需要制作散点图:
y = df['avg_hours_spend']
x = df['num_users']
N=12
colors = np.random.rand(N)
plt.scatter(x, y,c=colors)
plt.title('Web Sessions Data of Users')
plt.xlabel('No.Of.Users')
plt.ylabel('Mean Hours Users Spends on the Website')
plt.legend()
plt.show()
散点图,其中每种颜色代表不同的国家/地区
需要:
我想画大圈并在右侧添加图例,因为每个国家/地区的颜色都不同。
怎么样?
在 matplotlib 中,您可以为每个国家添加不同的散点(即数据框索引的每个级别),并将 s
参数设置为您想要的任何值(因为您想要更大的点,我添加了s=100
:
for i, row in df.iterrows():
plt.scatter(x=row.num_users, y=row.avg_hours_spend, label=i, s=100)
plt.title("Web Sessions Data of Users")
plt.xlabel("No.Of.Users")
plt.ylabel("Mean Hours Users Spends on the Website")
plt.legend()
plt.show()
您可以使用 seaborn 的不同语法获得类似的结果:
import seaborn as sns
ax = sns.scatterplot(
x="num_users",
y="avg_hours_spend",
hue="country_destination",
s=100,
data=df.reset_index(),
)
ax.set_title("Web Sessions Data of Users")
ax.set_xlabel("No.Of.Users")
ax.set_ylabel("Mean Hours Users Spends on the Website")
有table为:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
list_1=[['AU',152,474.0],
['CA',440,482.0],
['DE',250,564.0,],
['ES',707,549.0,],
['FR',1435,551.0,],
['GB',731,555.0,],
['IT',979,600.0,],
['NDF',45041,357.0,],
['NL',247,542.0,],
['PT',83,462.0,],
['US',20095,513.0,],
['other',3655,526.0,]]
labels=['country_destination','num_users','avg_hours_spend']
df=pd.DataFrame(list_1,columns=labels)
df=df.set_index('country_destination')
df
country_destination num_users avg_hours_spend
AU 152 474.0
CA 440 482.0
DE 250 564.0
ES 707 549.0
FR 1435 551.0
GB 731 555.0
IT 979 600.0
NDF 45041 357.0
NL 247 542.0
PT 83 462.0
US 20095 513.0
other 3655 526.0
我需要制作散点图:
y = df['avg_hours_spend']
x = df['num_users']
N=12
colors = np.random.rand(N)
plt.scatter(x, y,c=colors)
plt.title('Web Sessions Data of Users')
plt.xlabel('No.Of.Users')
plt.ylabel('Mean Hours Users Spends on the Website')
plt.legend()
plt.show()
散点图,其中每种颜色代表不同的国家/地区
需要: 我想画大圈并在右侧添加图例,因为每个国家/地区的颜色都不同。 怎么样?
在 matplotlib 中,您可以为每个国家添加不同的散点(即数据框索引的每个级别),并将 s
参数设置为您想要的任何值(因为您想要更大的点,我添加了s=100
:
for i, row in df.iterrows():
plt.scatter(x=row.num_users, y=row.avg_hours_spend, label=i, s=100)
plt.title("Web Sessions Data of Users")
plt.xlabel("No.Of.Users")
plt.ylabel("Mean Hours Users Spends on the Website")
plt.legend()
plt.show()
您可以使用 seaborn 的不同语法获得类似的结果:
import seaborn as sns
ax = sns.scatterplot(
x="num_users",
y="avg_hours_spend",
hue="country_destination",
s=100,
data=df.reset_index(),
)
ax.set_title("Web Sessions Data of Users")
ax.set_xlabel("No.Of.Users")
ax.set_ylabel("Mean Hours Users Spends on the Website")