我有一个数据框,其中在产品列中有许多不同的项目,让我们只显示一些:
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,但所有其他行都是蓝色的,而我想要:
- 为item_1和item_2同时设置红色和非虚线
- 为所有其他行设置另一个颜色调色板(例如明亮)
这是否有可能?