【发布时间】:2021-04-09 10:35:48
【问题描述】:
我有一个数据框,其中 Products 列中有许多不同的项目,我们只显示几个:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = np.array([[1, 1, 570], [2, 1, 650], [1, 2, 27], [2, 2, 64], [1, 3, 125], [2, 3, 216],
[1, 'item_1', 343], [2, 'item_1', 340], [1, 'item_2', 343], [2, 'item_2', 345]])
df = pd.DataFrame(data=data, columns=["Flag", "Products", "Value"])
我正在使用 Seaborn 获得以下线图:
sns.set_theme()
sns.set_style("ticks")
sns.set_context("paper")
fig1, ax1 = plt.subplots()
sns.lineplot(data=df, x="Flag", y="Value",
hue="Products", style="Products", ax=ax1)
plt.legend(bbox_to_anchor=(1.02, 1),borderaxespad=0)
fig1.tight_layout()
通过这种方式,所有线条都有 Seaborn“选择”的样式,但我需要为名为“item_1”和“item_2”的产品设置特定颜色和线条样式(不是虚线)。 到目前为止,我已经找到了以下解决方案:
palette = {c:'red' if c=='item_1' else 'blue' for c in df.Products.unique()}
sns.lineplot(data=df, x="Flag", y="Value",
hue="Products", style="Products", palette=palette, ax=ax1)
所以,我可以只为 item_1 设置红色,但所有其他行都是蓝色的,而我想:
- 为 items_1 和 items_2 设置红色和非虚线
- 为所有其他线条设置另一个调色板(例如明亮)
有可能吗?
【问题讨论】: