matplotlib画点

我现在有一组数据一共是三列:第一列是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