Python 以不同的色调绘制点标记和线,但与seaborn的样式相同
鉴于以下数据框架:Python 以不同的色调绘制点标记和线,但与seaborn的样式相同,python,data-visualization,seaborn,aesthetics,Python,Data Visualization,Seaborn,Aesthetics,鉴于以下数据框架: import pandas as pd df = pd.DataFrame({ "n_index": list(range(5)) * 2, "logic": [True] * 5 + [False] * 5, "value": list(range(5)) + list(range(5, 10)) }) 我想使用颜色和唯一的颜色来区分线图中的逻辑,并在值s上标记点。具体来说,这是我想要的输出(由R绘制): 我尝试对做同样的事情,我指定了marke
import pandas as pd
df = pd.DataFrame({
"n_index": list(range(5)) * 2,
"logic": [True] * 5 + [False] * 5,
"value": list(range(5)) + list(range(5, 10))
})
我想使用颜色和唯一的颜色来区分线图中的逻辑
,并在值
s上标记点。具体来说,这是我想要的输出(由R绘制):
我尝试对做同样的事情,我指定了markers=True
,但没有标记:
import seaborn as sns
sns.set()
sns.lineplot(x="n_index", y="value", hue="logic", markers=True, data=df)
然后我尝试在代码中添加style=“logic”
,现在标记出现了:
sns.lineplot(x="n_index", y="value", hue="logic", style="logic", markers=True, data=df)
此外,我还尝试强制标记采用相同的样式:
sns.lineplot(x="n_index", y="value", hue="logic", style="logic", markers=["o", "o"], data=df)
似乎我必须先指定样式
,然后才能使用标记。但是,这会导致不需要的绘图输出,因为我不想在一个数据维度上使用两个美学维度。这违反了美学制图的原则
有没有什么方法可以让线和点在
seaborn
或Python可视化中使用相同的样式,但颜色不同?(seaborn
是首选-我不喜欢matplotlib
的循环方式)您需要将破折号
参数设置为False
并将网格样式指定为暗格网格“
:
您可以直接使用熊猫进行绘图 熊猫通过groupby
fig, ax = plt.subplots()
df.groupby("logic").plot(x="n_index", y="value", marker="o", ax=ax)
ax.legend(["False","True"])
这里的缺点是需要手动创建图例
通过枢轴连接
df.pivot_table("value", "n_index", "logic").plot(marker="o")
seaborn线形图
df.pivot_table("value", "n_index", "logic").plot(marker="o")
对于seaborn测线图,似乎一个标记就足以获得所需的结果
sns.lineplot(x="n_index", y="value", hue="logic", data=df, marker="o")
您可以在sns.linePlot中设置marker='o',以适当的颜色将标记绘制为所有不同颜色的圆形
sns.lineplot(x="n_index", y="value", hue="logic", marker="o", data=df)
问题是人们把“标记”和“标记”搞混了。要启用“marker”,请将“marker='o'设置为not markers
sns.lineplot(x=range(1,100),y=err,marker='o')
由于在seaborn中这样做显然不那么直接有趣,所以在SoupMoting中,灰色背景网格/帧消失了。根据seaborn.lineplot文档,
标记应为布尔值、列表或字典,设置为True将使用默认标记。这可能是一个需要报告的bug吗?请注意,我使用的不是标记
,而是标记
,它是一个matplotlib参数,只需传递给matplotlib的plot
函数。那么文档没有错,是吗?但是您的用例可能被认为是缺少的特性。另外,图例忽略了实际绘制的艺术家这一事实可能被认为是一个缺陷。我认为这是公认的答案中使用的。这是评论吗?一旦你有足够的声誉,你就可以发表评论。否则,请解释这与公认的答案有什么不同?公认的答案不会给出问题的症结所在。它没有解释用户在方法上哪里出了问题,从而产生了一种混乱,可能导致用户接受答案并直接使用它,而从来没有试图找出他/她的代码中的问题。
sns.lineplot(x=range(1,100),y=err,marker='o')