如何使用matplotlib绘制元组列表散点图并区分付费/免费账户
解决方案
你需要按账户类型将数据拆为两组分别绘制,给每组设置不同的展示样式并添加标签,图例就可以自动区分两类数据,修改后的代码如下:
import matplotlib.pyplot as plt # 你的原始数据集 data = [(0.7,48000,1),(1.9,48000,0),(2.5,60000,1),(4.2,63000,0)] # 拆分付费、免费账户数据 paid_tenure, paid_salary = [], [] free_tenure, free_salary = [], [] for tenure, sal, acc in data: if acc == 1: paid_tenure.append(tenure) paid_salary.append(sal) else: free_tenure.append(tenure) free_salary.append(sal) # 分别绘制两组散点,指定样式和标签 plt.scatter(paid_tenure, paid_salary, c="#1f77b4", marker="^", label="付费账户") plt.scatter(free_tenure, free_salary, c="#ff7f0e", marker="o", label="免费账户") plt.title('Data-Science Club Members') plt.xlabel('Years as Data Scientist') plt.ylabel('Salary') plt.legend() plt.show()
如果你已经安装了numpy,也可以用布尔索引简化拆分逻辑,不用手写循环:
import matplotlib.pyplot as plt import numpy as np data = [(0.7,48000,1),(1.9,48000,0),(2.5,60000,1),(4.2,63000,0)] tenure, salary, account = zip(*data) # 转为numpy数组方便筛选 tenure = np.array(tenure) salary = np.array(salary) account = np.array(account) # 直接按条件筛选绘制 plt.scatter(tenure[account==1], salary[account==1], c="#1f77b4", marker="^", label="付费账户") plt.scatter(tenure[account==0], salary[account==0], c="#ff7f0e", marker="o", label="免费账户") plt.title('Data-Science Club Members') plt.xlabel('Years as Data Scientist') plt.ylabel('Salary') plt.legend() plt.show()
你可以按需调整c(颜色值)、marker(标记形状)、s(点的大小)参数自定义显示效果。
内容的提问来源于stack exchange,提问作者Dante Zelaya
相关产品推荐
相关产品推荐

