我现在有一组数据一共是三列:第一列是id 第二三列分别是x,y坐标。现在我想用matplotlib把这些点画出来,并根据前面的id进行分类显示,相同id的点用同一种颜色表示出来。求大佬我应该怎么操作呢。
有两种方式可以实现,例如,有以下数据。
import seaborn as sns
sns.set(style="darkgrid")
tips = sns.load_dataset("tips")
tips.head()
关注前三列:total_bill,tip,sex,这里total相当于x,tip相当于y,sex相当于id。
第一种方式:seaborn,一行代码即可。
sns.relplot(x="total_bill", y="tip", hue="sex", data=tips);
第二种方式:matplotlib。
x=tips['total_bill']
y=tips['tip']
c_label=[1 if i=='Female' else 0 for i in tips['sex']]
c_label[:10]
import matplotlib.pyplot as plt
fig,ax=plt.subplots()
ax.scatter(x,y,c=c_label,cmap='autumn')
plt.show()
python中可以作图的工具包比较多, 说下其中的4种方法,提供下思路, 也可以比较不同工具包的异同点.
1 先导入工具包, 构造一组数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas_bokeh
data = pd.DataFrame({'id':np.random.choice(['a','b','c'],60), # 三种分类
'x':np.random.randint(4,50,60),
'y':np.random.randint(10,30,60)})
2 pandas作图: 本质上是用的matplotlib工具包
# 方法一:
# 构造颜色与分类的对应关系, 如果想自定义颜色, 可以通过这种方式
colormap = {'a': 'red', 'b': 'green', 'c': 'blue','d':'yellow'}
colors = [colormap[x] for x in data['id']]
data.plot.scatter(figsize=(12,8), # 图表大小
x='x', # x轴
y='y', # y轴
color=colors) # 颜色
3 matplotlib作图
#方法二:
plt.subplots(figsize=(12,8))
plt.scatter(x=data['x'], # x轴
y=data['y'], # y轴
color=colors) # 颜色
4 seaborn作图
# 方法三
plt.subplots(figsize=(12,8))
sns.scatterplot(x="x", # x轴
y="y",# y轴
hue="id", # 颜色分类
palette='Spectral_r', # 调色盘
data=data)
5 pandas-bokeh作图: 动态效果
# 方法四
data.plot_bokeh.scatter(x="x",
y="y",
category="id", # 作为分类的字段列
)
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632