如何在 Matplotlib 中混合线条样式和颜色

问题描述 投票:0回答:1

我想在单个图表中创建具有两种不同线条样式的折线图,同时自定义 pandas 数据帧上每条线的颜色。例如,如果以下客户的支出超过 100,他们将被标记为“高级”客户。否则,他们就是“标准”客户。

我的目标是绘制客户每周花费的金额,在高级时使用实线。我被困在如何对客户的线路进行颜色编码和使用多种线路样式上。这可能吗?

'''

import pandas as pd
data = {'Date': ['9/1/2024', '9/8/2024', '9/15/2024', '9/22/2024', '9/27/2024', '10/3/2024', '9/1/2024', '9/8/2024', '9/15/2024', '9/22/2024', '9/27/2024', '10/3/2024', '9/1/2024', '9/8/2024', '9/15/2024', '9/22/2024', '9/27/2024', '10/3/2024'],
        'Customer': ['Customer A', 'Customer A', 'Customer A', 'Customer A', 'Customer A', 'Customer A', 'Customer B', 'Customer B', 'Customer B', 'Customer B', 'Customer B', 'Customer B', 'Customer C', 'Customer C', 'Customer C', 'Customer C', 'Customer C', 'Customer C'],
        'Spend': [100, 200, 10, 150, 180, 200, 100, 200, 10, 15, 200, 200, 100, 200, 10, 10, 300, 150],
        'Color': ['Red', 'Red', 'Red', 'Red', 'Red', 'Red', 'Orange', 'Orange', 'Orange', 'Orange', 'Orange', 'Orange', 'Yellow', 'Yellow', 'Yellow', 'Yellow', 'Yellow', 'Yellow']}
df['PurchaseType'] = np.where(df['Spend']>=100, 'A', 'B')

'''

我尝试过屏蔽类似于这篇文章的数据用虚线替换部分绘图但我卡在绘图上。

python pandas matplotlib
1个回答
0
投票

您可以单独绘制保费数据。这是您可以做到的一种方法。

import matplotlib.pyplot as plt
import seaborn as sns

import pandas as pd

data = {'Date': ['9/1/2024', '9/8/2024', '9/15/2024', '9/22/2024', '9/27/2024', '10/3/2024', '9/1/2024', '9/8/2024', '9/15/2024', '9/22/2024', '9/27/2024', '10/3/2024', '9/1/2024', '9/8/2024', '9/15/2024', '9/22/2024', '9/27/2024', '10/3/2024'],
        'Customer': ['Customer A', 'Customer A', 'Customer A', 'Customer A', 'Customer A', 'Customer A', 'Customer B', 'Customer B', 'Customer B', 'Customer B', 'Customer B', 'Customer B', 'Customer C', 'Customer C', 'Customer C', 'Customer C', 'Customer C', 'Customer C'],
        'Spend': [100, 200, 10, 150, 180, 200, 100, 200, 10, 15, 200, 200, 100, 200, 10, 10, 300, 150],
        'Color': ['Red', 'Red', 'Red', 'Red', 'Red', 'Red', 'Orange', 'Orange', 'Orange', 'Orange', 'Orange', 'Orange', 'Yellow', 'Yellow', 'Yellow', 'Yellow', 'Yellow', 'Yellow']}

df = pd.DataFrame(data)
df['PurchaseType'] = np.where(df['Spend']>=100, 'A', 'B')

colors = list(df['Color'].unique())
ax1 = sns.lineplot(data = df[df['PurchaseType'] == 'A'], x= 'Date', y = 'Spend', linestyle='-', hue='Customer', palette=colors)
ax1 = sns.lineplot(data = df[df['PurchaseType'] == 'B'], x= 'Date', y = 'Spend', linestyle='--',color='Color', hue='Customer', palette = colors)
ax1.get_legend().remove()

Figure

© www.soinside.com 2019 - 2024. All rights reserved.