python - Python - 基于另一列的动态折线图标记颜色
问题描述
我正在尝试在Python中创建一个简单的折线图,我想为每个客户显示一条线,显示基于值(y 轴)和日期(x 轴)的趋势。标记颜色应基于颜色字段。
请在下面找到示例数据和预期输出(对不起我的涂鸦)
解决方案
一种简单的方法是首先使用该plot
函数绘制线条,例如黑色,然后使用scatter
绘制彩色标记。这里我展示一个例子:
我生成类似于您的数据如下(我想您将数据存储在熊猫数据框中):
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
columns = ['CustID', 'Date', 'Value', 'Color']
data = []
np.random.seed(42)
for cus_id in np.arange(1, 5):
for date in ['jan', 'feb', 'mar', 'apr']:
data.append([cus_id, date, np.random.randint(20,35),
np.random.choice(['red', 'blue', 'green'])])
df = pd.DataFrame(data=data, columns=columns)
此时,df
包含此表。
最后,绘制折线图:
fig, ax = plt.subplots(1)
for _, df_cus in df.groupby('CustID'):
ax.plot(df_cus.Date, df_cus.Value, color='black', zorder=0)
ax.scatter(df_cus.Date, df_cus.Value, color=df_cus.Color, zorder=1)
我zorder
用来确保散点图始终位于黑线之上。
推荐阅读
- jfrog-cli - 如何使用 JFrog CLI 从 JFrog Artifactory 下载和上传多个工件
- node.js - 我遇到了在车把中加载自定义字体的 puppeteer 问题
- android - 第一个 Unity Android 游戏 - 奇怪/未知的应用内购买错误
- node.js - 如何使用 multer 上传视频并强制格式为 mp4
- laravel - laravel 护照多重认证有问题
- mysql - mysql 在过去 N 小时内的简单移动平均线
- sql - 统计堆栈交换数据库中具有相同 AnswerCount 值的单个匹配记录的数量
- python - Lambda 表达式 (Python)
- html - 如何让我隐藏的 div 显示在下拉菜单中
- mysql - 检索 MySQL 中不具有 NULL 或特定值的属性